日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux 的内存管理工具和调优参数

發(fā)布時(shí)間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 的内存管理工具和调优参数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. free
2. top
3. vmstat
4. slabtop;
5. pmap
6. dmesg
7. /proc/meminfo
8. /proc/sys/vm 目錄下的文件
9. sync
10./proc/zoneinfo?

11./proc/pagetypeinfo

查看內(nèi)存工具:

1.free
free - Display amount of free and used memory in the system
root@ubuntu:/home/ricky# free -h
? ? ? ? ? ? ?total ? ? ? used ? ? ? free ? ? shared ? ?buffers ? ? cached
Mem: ? ? ? ? ?2.0G ? ? ? 712M ? ? ? 1.3G ? ? ? 7.3M ? ? ? ?43M ? ? ? 296M
-/+ buffers/cache: ? ? ? 371M ? ? ? 1.6G
Swap: ? ? ? ? 2.0G ? ? ? ? 0B ? ? ? 2.0G


//shared: 共享內(nèi)存
//buffers: block buffers
//cached: ?page cache
??
2.top
top - 05:49:21 up 18 min, ?2 users, ?load average: 0.07, 0.18, 0.30
Tasks: 193 total, ? 1 running, 192 sleeping, ? 0 stopped, ? 0 zombie
%Cpu(s): ?2.4 us, ?6.0 sy, ?0.9 ni, 87.0 id, ?3.6 wa, ?0.0 hi, ?0.1 si, ?0.0 st
KiB Mem: ? 2063844 total, ?1093352 used, ? 970492 free, ? 134932 buffers
KiB Swap: ?2094076 total, ? ? ? ?0 used, ?2094076 free. ? 519908 cached Mem


? PID USER ? ? ?PR ?NI ? ?VIRT ? ?RES ? ?SHR S ?%CPU %MEM ? ? TIME+ COMMAND
?4068 root ? ? ?20 ? 0 ? ?5424 ? 1332 ? ?988 R ?11.9 ?0.1 ? 0:00.03 top
?1065 root ? ? ?20 ? 0 ?181812 ?37872 ?17900 S ? 6.0 ?1.8 ? 0:25.80 Xorg
? ? 1 root ? ? ?20 ? 0 ? ?4600 ? 2584 ? 1444 S ? 0.0 ?0.1 ? 0:03.88 init
? ? 2 root ? ? ?20 ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.00 kthreadd
? ? 3 root ? ? ?20 ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.43 ksoftirqd/0
? ? 5 root ? ? ? 0 -20 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.00 kworker/0:0H
? ? 7 root ? ? ?20 ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:04.06 rcu_sched
? ? 8 root ? ? ?20 ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.00 rcu_bh
? ? 9 root ? ? ?rt ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.85 migration/0
? ?10 root ? ? ?rt ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.86 watchdog/0
? ?11 root ? ? ?rt ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.18 watchdog/1
? ?12 root ? ? ?rt ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.14 migration/1
? ?13 root ? ? ?20 ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.26 ksoftirqd/1
? ?14 root ? ? ?20 ? 0 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.00 kworker/1:0
? ?15 root ? ? ? 0 -20 ? ? ? 0 ? ? ?0 ? ? ?0 S ? 0.0 ?0.0 ? 0:00.00 kworker/1:0H


top是可交互的命令工具
按下A/M/N/P/T可以進(jìn)行排序,如下:
?SORTING of task window
? ? ? ? ?For ?compatibility, ?this top supports most of the former top sort keys. ?Since this is primarily a service to former top
? ? ? ? ?users, these commands do not appear on any help screen.
? ? ? ? ? ? command ? sorted-field ? ? ? ? ? ? ? ? ?supported
? ? ? ? ? ? ? A ? ? ? ? start time (non-display) ? ? ?No
? ? ? ? ? ? ? M ? ? ? ? %MEM ? ? ? ? ? ? ? ? ? ? ? ? ?Yes
? ? ? ? ? ? ? N ? ? ? ? PID ? ? ? ? ? ? ? ? ? ? ? ? ? Yes
? ? ? ? ? ? ? P ? ? ? ? %CPU ? ? ? ? ? ? ? ? ? ? ? ? ?Yes
? ? ? ? ? ? ? T ? ? ? ? TIME+ ? ? ? ? ? ? ? ? ? ? ? ? Yes
按下f鍵(Fields)可以打開或者關(guān)閉指定的列,如下,


Fields Management for window 1:Def, whose current sort field is TIME+
? ?Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
? ?'d' or <Space> toggles display, 's' sets sort. ?Use 'q' or <Esc> to end!


* PID ? ? = Process Id ? ? ? ? ? ? ENVIRON = Environment vars ? ?
* USER ? ?= Effective User Name ? ?vMj ? ? = Major Faults delta ?
* PR ? ? ?= Priority ? ? ? ? ? ? ? vMn ? ? = Minor Faults delta ?
* NI ? ? ?= Nice Value ? ? ? ? ? ? USED ? ?= Res+Swap Size (KiB)?
* VIRT ? ?= Virtual Image (KiB) ? ?nsIPC ? = IPC namespace Inode?
* RES ? ? = Resident Size (KiB) ? ?nsMNT ? = MNT namespace Inode?
* SHR ? ? = Shared Memory (KiB) ? ?nsNET ? = NET namespace Inode?
* S ? ? ? = Process Status ? ? ? ? nsPID ? = PID namespace Inode?
* %CPU ? ?= CPU Usage ? ? ? ? ? ? ?nsUSER ?= USER namespace Inode
* %MEM ? ?= Memory Usage (RES) ? ? nsUTS ? = UTS namespace Inode?
* TIME+ ? = CPU Time, hundredths
* COMMAND = Command Name/Line ??
? PPID ? ?= Parent Process pid ?
? UID ? ? = Effective User Id ??
? RUID ? ?= Real User Id ? ? ? ?
? RUSER ? = Real User Name ? ? ?
? SUID ? ?= Saved User Id ? ? ??
? SUSER ? = Saved User Name ? ??
? GID ? ? = Group Id ? ? ? ? ? ?
? GROUP ? = Group Name ? ? ? ? ?
? PGRP ? ?= Process Group Id ? ?
? TTY ? ? = Controlling Tty ? ??
? TPGID ? = Tty Process Grp Id ?
? SID ? ? = Session Id ? ? ? ? ?
? nTH ? ? = Number of Threads ??
? P ? ? ? = Last Used Cpu (SMP)?
? TIME ? ?= CPU Time ? ? ? ? ? ?
? SWAP ? ?= Swapped Size (KiB) ?
? CODE ? ?= Code Size (KiB) ? ??
? DATA ? ?= Data+Stack (KiB) ? ?
? nMaj ? ?= Major Page Faults ??
? nMin ? ?= Minor Page Faults ??
? nDRT ? ?= Dirty Pages Count ??
? WCHAN ? = Sleeping in Function
? Flags ? = Task Flags <sched.h>
? CGROUPS = Control Groups ? ? ?
? SUPGIDS = Supp Groups IDs ? ??
? SUPGRPS = Supp Groups Names ??
? TGID ? ?= Thread Group Id ?
??
? 其中如下幾個(gè)filed 與內(nèi)存有關(guān)。
? SWAP ? ?= Swapped Size (KiB) ?
? CODE ? ?= Code Size (KiB) ? ??
? DATA ? ?= Data+Stack (KiB) ? ?
? nMaj ? ?= Major Page Faults ??
? nMin ? ?= Minor Page Faults ??
? nDRT ? ?= Dirty Pages Count?
??
page fault 又分為幾種,major page fault、 minor page fault、 invalid(segment fault)。
major page fault也稱為hard page fault, 指需要訪問的內(nèi)存不在虛擬地址空間,也不在物理內(nèi)存中,需要從慢速設(shè)備載入。從swap回到物理內(nèi)存也是hard page fault。
minor page fault也稱為soft page fault, 指需要訪問的內(nèi)存不在虛擬地址空間,但是在物理內(nèi)存中,只需要MMU建立物理內(nèi)存和虛擬地址空間的映射關(guān)系即可。?
(通常是多個(gè)進(jìn)程訪問同一個(gè)共享內(nèi)存中的數(shù)據(jù),可能某些進(jìn)程還沒有建立起映射關(guān)系,所以訪問時(shí)會(huì)出現(xiàn)soft page fault)
invalid fault也稱為segment fault, 指進(jìn)程需要訪問的內(nèi)存地址不在它的虛擬地址空間范圍內(nèi),屬于越界訪問,內(nèi)核會(huì)報(bào)segment fault錯(cuò)誤。


3.vmstat
vmstat - Report virtual memory statistics
root@ubuntu:/home/ricky# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
?r ?b ? swpd ? free ? buff ?cache ? si ? so ? ?bi ? ?bo ? in ? cs us sy id wa st
?0 ?0 ? ? ?0 980532 134948 520236 ? ?0 ? ?0 ? ?34 ? ?10 ? 41 ? 70 ?1 ?1 98 ?0 ?0


?
? ? Memory
? ? ? ?swpd: the amount of virtual memory used.
? ? ? ?free: the amount of idle memory.
? ? ? ?buff: the amount of memory used as buffers.
? ? ? ?cache: the amount of memory used as cache.
? ? ? ?inact: the amount of inactive memory. ?(-a option)
? ? ? ?active: the amount of active memory. ?(-a option)


? ?Swap
? ? ? ?si: Amount of memory swapped in from disk (/s).
? ? ? ?so: Amount of memory swapped to disk (/s).


?
?4. slabtop
?slabtop - display kernel slab cache information in real time
?/proc/slabinfo
?
?Active / Total Objects (% used) ? ?: 350745 / 352998 (99.4%)
?Active / Total Slabs (% used) ? ? ?: 7986 / 7986 (100.0%)
?Active / Total Caches (% used) ? ? : 67 / 96 (69.8%)
?Active / Total Size (% used) ? ? ? : 59301.82K / 59760.34K (99.2%)
?Minimum / Average / Maximum Object : 0.01K / 0.17K / 8.00K


? OBJS ACTIVE ?USE OBJ SIZE ?SLABS OBJ/SLAB CACHE SIZE NAME
?70944 ?70944 100% ? ?0.12K ? 2217 ? ? ? 32 ? ? ?8868K dentry
?62342 ?62342 100% ? ?0.05K ? ?854 ? ? ? 73 ? ? ?3416K buffer_head
?40742 ?40742 100% ? ?0.61K ? 1567 ? ? ? 26 ? ? 25072K ext4_inode_cache
?34752 ?34483 ?99% ? ?0.06K ? ?543 ? ? ? 64 ? ? ?2172K kmalloc-64
?21252 ?21156 ?99% ? ?0.09K ? ?506 ? ? ? 42 ? ? ?2024K kmalloc-96
?19840 ?18831 ?94% ? ?0.03K ? ?155 ? ? ?128 ? ? ? 620K kmalloc-32
?19456 ?19456 100% ? ?0.03K ? ?152 ? ? ?128 ? ? ? 608K ext4_extent_status
?13568 ?13568 100% ? ?0.02K ? ? 53 ? ? ?256 ? ? ? 212K kmalloc-16
?10212 ?10212 100% ? ?0.34K ? ?444 ? ? ? 23 ? ? ?3552K inode_cache
? 8704 ? 8704 100% ? ?0.03K ? ? 68 ? ? ?128 ? ? ? 272K anon_vma
? 7875 ? 7745 ?98% ? ?0.19K ? ?375 ? ? ? 21 ? ? ?1500K kmalloc-192
? 7168 ? 7168 100% ? ?0.01K ? ? 14 ? ? ?512 ? ? ? ?56K kmalloc-8
? 6205 ? 6205 100% ? ?0.05K ? ? 73 ? ? ? 85 ? ? ? 292K Acpi-State
? 5772 ? 5772 100% ? ?0.30K ? ?222 ? ? ? 26 ? ? ?1776K radix_tree_node
? 4420 ? 4420 100% ? ?0.02K ? ? 26 ? ? ?170 ? ? ? 104K nsproxy
? 3654 ? 3598 ?98% ? ?0.37K ? ?174 ? ? ? 21 ? ? ?1392K proc_inode_cache


?
?5. pmap
? pmap - report memory map of a process
? root@ubuntu:/home/ricky/code# pmap 5162
5162: ? ./a.out
08048000 ? ? ?4K r-x-- a.out
08049000 ? ? ?4K r---- a.out
0804a000 ? ? ?4K rw--- a.out
b756a000 ? ?408K rw--- ? [ anon ]
b75d0000 ? 1700K r-x-- libc-2.19.so
b7779000 ? ? ?8K r---- libc-2.19.so
b777b000 ? ? ?4K rw--- libc-2.19.so
b777c000 ? ? 12K rw--- ? [ anon ]
b7794000 ? ? ?8K rw--- ? [ anon ]
b7796000 ? ? ?4K r-x-- ? [ anon ]
b7797000 ? ?128K r-x-- ld-2.19.so
b77b7000 ? ? ?4K r---- ld-2.19.so
b77b8000 ? ? ?4K rw--- ld-2.19.so
bfdaf000 ? ?132K rw--- ? [ stack ]
?total ? ? 2424K


?6.dmesg
? dmesg - print or control the kernel ring buffer
? 顯示內(nèi)核啟動(dòng)的日志 - 內(nèi)存相關(guān)log:
?1 [ ? ?0.000000] PERCPU: Embedded 14 pages/cpu @f7b82000 s36096 r0 d21248 u57344
? ? ? 2 [ ? ?0.000000] pcpu-alloc: s36096 r0 d21248 u57344 alloc=14*4096
? ? ? 3 [ ? ?0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 [0] 4 [0] 5 [0] 6 [0] 7
? ? ? 4 [ ? ?0.000000] Built 1 zonelists in Zone order, mobility grouping on. ?Total pages: 522373
? ? ? 5 [ ? ?0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.13.0-32-generic root=UUID=80483beb-4610-4202-8e4f-6e3774c72ce6 ? ? ? ? ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US quiet
? ? ? 6 [ ? ?0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
? ? ? 7 [ ? ?0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
? ? ? 8 [ ? ?0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
? ? ? 9 [ ? ?0.000000] Initializing CPU#0
? ? ?10 [ ? ?0.000000] xsave: enabled xstate_bv 0x3, cntxt size 0x240
? ? ?11 [ ? ?0.000000] allocated 4194296 bytes of page_cgroup
? ? ?12 [ ? ?0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
? ? ?13 [ ? ?0.000000] Initializing HighMem for node 0 (00037bfe:00080000)
? ? ?14 [ ? ?0.000000] Memory: 2044664K/2096628K available (6528K kernel code, 639K rwdata, 2760K rodata, 872K init, 924K bss, 51964K ? ? ? ? reserved, 1183624K highmem)
? ? ?15 [ ? ?0.000000] virtual kernel memory layout:
? ? ?16 [ ? ?0.000000] ? ? fixmap ?: 0xfff14000 - 0xfffff000 ? ( 940 kB)
? ? ?17 [ ? ?0.000000] ? ? pkmap ? : 0xffc00000 - 0xffe00000 ? (2048 kB)
? ? ?18 [ ? ?0.000000] ? ? vmalloc : 0xf83fe000 - 0xffbfe000 ? ( 120 MB)
? ? ?19 [ ? ?0.000000] ? ? lowmem ?: 0xc0000000 - 0xf7bfe000 ? ( 891 MB)
? ? ?20 [ ? ?0.000000] ? ? ? .init : 0xc19b4000 - 0xc1a8e000 ? ( 872 kB)
? ? ?21 [ ? ?0.000000] ? ? ? .data : 0xc1660532 - 0xc19b3e80 ? (3406 kB)
? ? ?22 [ ? ?0.000000] ? ? ? .text : 0xc1000000 - 0xc1660532 ? (6529 kB)


?7. cat /proc/meminfo
?root@ubuntu:/proc# cat meminfo
MemTotal: ? ? ? ?2063844 kB
MemFree: ? ? ? ? ?746660 kB
Buffers: ? ? ? ? ?138740 kB
Cached: ? ? ? ? ? 656536 kB
SwapCached: ? ? ? ? ? ?0 kB
Active: ? ? ? ? ? 763260 kB
Inactive: ? ? ? ? 446108 kB
Active(anon): ? ? 415072 kB
Inactive(anon): ? ?10880 kB
Active(file): ? ? 348188 kB
Inactive(file): ? 435228 kB
Unevictable: ? ? ? ? ?32 kB
Mlocked: ? ? ? ? ? ? ?32 kB
HighTotal: ? ? ? 1183624 kB
HighFree: ? ? ? ? 489896 kB
LowTotal: ? ? ? ? 880220 kB
LowFree: ? ? ? ? ?256764 kB
SwapTotal: ? ? ? 2094076 kB
SwapFree: ? ? ? ?2094076 kB
Dirty: ? ? ? ? ? ? ? ? 0 kB
Writeback: ? ? ? ? ? ? 0 kB
AnonPages: ? ? ? ?414204 kB
Mapped: ? ? ? ? ? 155944 kB
Shmem: ? ? ? ? ? ? 11864 kB
Slab: ? ? ? ? ? ? ?61084 kB
SReclaimable: ? ? ?45424 kB
SUnreclaim: ? ? ? ?15660 kB
KernelStack: ? ? ? ?3160 kB
PageTables: ? ? ? ? 7428 kB
NFS_Unstable: ? ? ? ? ?0 kB
Bounce: ? ? ? ? ? ? ? ?0 kB
WritebackTmp: ? ? ? ? ?0 kB
CommitLimit: ? ? 3125996 kB?
Committed_AS: ? ?2766012 kB
VmallocTotal: ? ? 122880 kB
VmallocUsed: ? ? ? 23744 kB
VmallocChunk: ? ? ?61636 kB
HardwareCorrupted: ? ? 0 kB
AnonHugePages: ? ?186368 kB
HugePages_Total: ? ? ? 0
HugePages_Free: ? ? ? ?0
HugePages_Rsvd: ? ? ? ?0
HugePages_Surp: ? ? ? ?0
Hugepagesize: ? ? ? 2048 kB
DirectMap4k: ? ? ? 28664 kB
DirectMap2M: ? ? ?884736 kB


CommitLimit:CommitLimit
可以參考:
http://www.firefoxbug.com/index.php/archives/2800/


?8. /proc/sys/vm 目錄下的文件
?root@ubuntu:/proc/sys/vm# ll
total 0
dr-xr-xr-x 1 root root 0 Jun 10 05:31 ./
dr-xr-xr-x 1 root root 0 Jun 10 05:31 ../
-rw-r--r-- 1 root root 0 Jun 10 09:18 admin_reserve_kbytes
-rw-r--r-- 1 root root 0 Jun 10 09:18 block_dump
--w------- 1 root root 0 Jun 10 09:18 compact_memory
-rw-r--r-- 1 root root 0 Jun 10 09:18 dirty_background_bytes
-rw-r--r-- 1 root root 0 Jun 10 05:32 dirty_background_ratio
-rw-r--r-- 1 root root 0 Jun 10 09:18 dirty_bytes
-rw-r--r-- 1 root root 0 Jun 10 09:18 dirty_expire_centisecs
-rw-r--r-- 1 root root 0 Jun 10 05:32 dirty_ratio
-rw-r--r-- 1 root root 0 Jun 10 05:32 dirty_writeback_centisecs
-rw-r--r-- 1 root root 0 Jun 10 09:18 drop_caches
-rw-r--r-- 1 root root 0 Jun 10 09:18 extfrag_threshold
-rw-r--r-- 1 root root 0 Jun 10 09:18 highmem_is_dirtyable
-rw-r--r-- 1 root root 0 Jun 10 09:18 hugepages_treat_as_movable
-rw-r--r-- 1 root root 0 Jun 10 09:18 hugetlb_shm_group
-rw-r--r-- 1 root root 0 Jun 10 05:32 laptop_mode
-rw-r--r-- 1 root root 0 Jun 10 09:18 legacy_va_layout
-rw-r--r-- 1 root root 0 Jun 10 09:18 lowmem_reserve_ratio
-rw-r--r-- 1 root root 0 Jun 10 09:18 max_map_count
-rw-r--r-- 1 root root 0 Jun 10 09:18 memory_failure_early_kill
-rw-r--r-- 1 root root 0 Jun 10 09:18 memory_failure_recovery
-rw-r--r-- 1 root root 0 Jun 10 09:18 min_free_kbytes
-rw-r--r-- 1 root root 0 Jun 10 05:31 mmap_min_addr
-rw-r--r-- 1 root root 0 Jun 10 09:18 nr_hugepages
-rw-r--r-- 1 root root 0 Jun 10 09:18 nr_overcommit_hugepages
-r--r--r-- 1 root root 0 Jun 10 09:18 nr_pdflush_threads
-rw-r--r-- 1 root root 0 Jun 10 09:18 oom_dump_tasks
-rw-r--r-- 1 root root 0 Jun 10 09:18 oom_kill_allocating_task
-rw-r--r-- 1 root root 0 Jun 10 05:31 overcommit_memory
-rw-r--r-- 1 root root 0 Jun 10 09:18 overcommit_ratio
-rw-r--r-- 1 root root 0 Jun 10 09:18 page-cluster
-rw-r--r-- 1 root root 0 Jun 10 09:18 panic_on_oom
-rw-r--r-- 1 root root 0 Jun 10 09:18 percpu_pagelist_fraction
-rw-r--r-- 1 root root 0 Jun 10 09:18 scan_unevictable_pages
-rw-r--r-- 1 root root 0 Jun 10 09:18 stat_interval
-rw-r--r-- 1 root root 0 Jun 10 09:18 swappiness
-rw-r--r-- 1 root root 0 Jun 10 09:18 user_reserve_kbytes
-rw-r--r-- 1 root root 0 Jun 10 09:18 vdso_enabled
-rw-r--r-- 1 root root 0 Jun 10 09:18 vfs_cache_pressure


解釋:
swappiness:
(0~100), 該值越高則linux越傾向于將部分長期沒有用到的頁swap到交換磁盤。
swappiness=0,不會(huì)交換匿名頁面到交換磁盤,除非系統(tǒng)內(nèi)存非常低
swappiness=100, 內(nèi)核積極回收匿名頁面。


panic_on_oom:
用于控制如何處理out-of-memory,可選值包括0/1/2
0:當(dāng)內(nèi)存不足時(shí)內(nèi)核調(diào)用OOM killer殺死一些rogue進(jìn)程,每個(gè)進(jìn)程描述符都有一個(gè)oom_score標(biāo)示,oom killer會(huì)選擇oom_score較大的進(jìn)程
1:發(fā)生了OOM以后,如果有mempolicy/cpusets的進(jìn)程限制,而這些nodes導(dǎo)致了內(nèi)存問題的時(shí)候,OOM Killer會(huì)干掉這些中的一個(gè),系統(tǒng)也會(huì)恢復(fù)
2:OOM后必然panic
備注:每個(gè)進(jìn)程有一個(gè)oom_score_adj (取值范圍:-1000 - 1000)與此參數(shù)有關(guān),-1000表示不會(huì)被oom killer選中。
舊版本中用的是oom_adj(-17,15),不過oom_adj逐漸會(huì)被oom_score_adj 取代。
比如:
cat /proc/<pid>/oom_score_adj


如下鏈接非常重要:
https://www.cnblogs.com/tolimit/p/5065761.html
admin_reserve_kbytes:給有cap_sys_admin權(quán)限的用戶保留的內(nèi)存數(shù)量(默認(rèn)值是 min(free_page * 0.03, 8MB))


drop_caches:
寫入數(shù)值可以使內(nèi)核釋放page_cache,dentries和inodes緩存所占的內(nèi)存。
1:只釋放page_cache
2:只釋放dentries和inodes緩存
3:釋放page_cache、dentries和inodes緩存


oom_dump_tasks
如果啟用,在內(nèi)核執(zhí)行OOM-killing時(shí)會(huì)打印系統(tǒng)內(nèi)進(jìn)程的信息(不包括內(nèi)核線程),信息包括pid、uid、tgid、vm size、rss、nr_ptes,swapents,oom_score_adj和進(jìn)程名稱。這些信息可以幫助找出為什么OOM killer被執(zhí)行,找到導(dǎo)致OOM的進(jìn)程,以及了解為什么進(jìn)程會(huì)被選中。
0:不打印系統(tǒng)內(nèi)進(jìn)程信息
1:打印系統(tǒng)內(nèi)進(jìn)程信息


memory_failure_early_kill:
控制發(fā)生某個(gè)內(nèi)核無法處理的內(nèi)存錯(cuò)誤發(fā)生的時(shí)候,如何去殺掉這個(gè)進(jìn)程。當(dāng)這些錯(cuò)誤頁有swap鏡像的時(shí)候,內(nèi)核會(huì)很好的處理這個(gè)錯(cuò)誤,不會(huì)影響任何應(yīng)用程序,但是如果沒有的話,內(nèi)核會(huì)把進(jìn)程殺掉,避免內(nèi)存錯(cuò)誤的擴(kuò)大
1:在發(fā)現(xiàn)內(nèi)存錯(cuò)誤的時(shí)候,就會(huì)把所有擁有此內(nèi)存頁的進(jìn)程都?xì)⒌?
0:只是對(duì)這部分頁進(jìn)行unmap,然后把第一個(gè)試圖進(jìn)入這個(gè)頁的進(jìn)程殺掉
memory_failure_recovery:
是否開啟內(nèi)存錯(cuò)誤恢復(fù)機(jī)制
1:開啟
0:一旦出現(xiàn)內(nèi)存錯(cuò)誤,就panic


https://blog.csdn.net/joyeu/article/details/20063429
min_free_kbytes:代表系統(tǒng)所保留空閑內(nèi)存的最低限,在系統(tǒng)初始化時(shí)會(huì)根據(jù)內(nèi)存大小計(jì)算一個(gè)默認(rèn)值,計(jì)算規(guī)則是:
min_free_kbytes = sqrt(lowmem_kbytes * 16) = 4 * sqrt(lowmem_kbytes)(注:lowmem_kbytes即可認(rèn)為是系統(tǒng)內(nèi)存大小)
min_free_kbytes的主要用途是計(jì)算影響內(nèi)存回收的三個(gè)參數(shù) watermark[min/low/high]
?三個(gè)watermark的計(jì)算方法:
?watermark[min] = min_free_kbytes換算為page單位即可,假設(shè)為min_free_pages。
?因?yàn)槭敲總€(gè)zone各有一套watermark參數(shù),實(shí)際計(jì)算效果是根據(jù)各個(gè)zone大小所占內(nèi)存總大小的比例,而算出來的per zone min_free_pages)
?watermark[low] = watermark[min] * 5 / 4
?watermark[high] = watermark[min] * 3 / 2


https://blog.csdn.net/joyeu/article/details/20063429
lowmem_reserve_ratio
1.作用
除了min_free_kbytes會(huì)在每個(gè)zone上預(yù)留一部分內(nèi)存外,lowmem_reserve_ratio是在各個(gè)zone之間進(jìn)行一定的防衛(wèi)預(yù)留,主要是防止高端zone在沒內(nèi)存的情況下過度使用低端zone的內(nèi)存資源。
例如現(xiàn)在常見的一個(gè)node的機(jī)器有三個(gè)zone: DMA,DMA32和NORMAL。DMA和DMA32屬于低端zone,內(nèi)存也較小,如96G內(nèi)存的機(jī)器兩個(gè)zone總和才1G左右,NORMAL就相對(duì)屬于高端內(nèi)存(現(xiàn)在一般沒有HIGH zone),而且數(shù)量較大(>90G)。低端內(nèi)存有一定的特殊作用比如發(fā)生DMA時(shí)只能分配DMA zone的低端內(nèi)存,因此需要在 盡量可以使用高端內(nèi)存時(shí) 而 不使用低端內(nèi)存,同時(shí)防止高端內(nèi)存分配不足的時(shí)候搶占稀有的低端內(nèi)存


?
http://www.firefoxbug.com/index.php/archives/2800/
overcommit_memory:
0 — 默認(rèn)設(shè)置。個(gè)人理解:當(dāng)應(yīng)用進(jìn)程嘗試申請(qǐng)內(nèi)存時(shí),內(nèi)核會(huì)做一個(gè)檢測。內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用;如果有足夠的可用內(nèi)存,內(nèi)存申請(qǐng)?jiān)试S;否則,內(nèi)存申請(qǐng)失敗,并把錯(cuò)誤返回給應(yīng)用進(jìn)程。舉個(gè)例子,比如1G的機(jī)器,A進(jìn)程已經(jīng)使用了500M,當(dāng)有另外進(jìn)程嘗試malloc 500M的內(nèi)存時(shí),內(nèi)核就會(huì)進(jìn)行check,發(fā)現(xiàn)超出剩余可用內(nèi)存,就會(huì)提示失敗。
1 — 對(duì)于內(nèi)存的申請(qǐng)請(qǐng)求,內(nèi)核不會(huì)做任何check,直到物理內(nèi)存用完,觸發(fā)OOM殺用戶態(tài)進(jìn)程。同樣是上面的例子,1G的機(jī)器,A進(jìn)程500M,B進(jìn)程嘗試malloc 500M,會(huì)成功,但是一旦kernel發(fā)現(xiàn)內(nèi)存使用率接近1個(gè)G(內(nèi)核有策略),就觸發(fā)OOM,殺掉一些用戶態(tài)的進(jìn)程(有策略的殺)。
2 — 當(dāng)請(qǐng)求申請(qǐng)的內(nèi)存 >= SWAP內(nèi)存大小 + 物理內(nèi)存 * ?N,則拒絕此次內(nèi)存申請(qǐng)。
解釋下這個(gè)N:N是一個(gè)百分比,根據(jù)overcommit_ratio/100來確定,比如overcommit_ratio=50,那么N就是50%。
overcommit_ratio:
只有當(dāng)vm.overcommit_memory = 2的時(shí)候才會(huì)生效,內(nèi)存可申請(qǐng)內(nèi)存為
SWAP內(nèi)存大小 + 物理內(nèi)存 * overcommit_ratio/100


percpu_pagelist_fraction:
每個(gè)CPU能從每個(gè)zone所能分配到的pages的最大值(單位每個(gè)zone的1/X),0為不限制


9. sync
NAME
? ? ? ?sync - flush file system buffers
DESCRIPTION
? ? ? ?Force changed blocks to disk, update the super block.
??
11./proc/pagetypeinfo
root@ubuntu:/usr/local# cat /proc/pagetypeinfo
Page block order: 9
Pages per block: ?512


Free pages count per migrate type at order ? ? ? 0 ? ? ?1 ? ? ?2 ? ? ?3 ? ? ?4 ? ? ?5 ? ? ?6 ? ? ?7 ? ? ?8 ? ? ?9 ? ? 10?
Node ? ?0, zone ? ? ?DMA, type ? ?Unmovable ? ? ?1 ? ? ?1 ? ? ?3 ? ? ?0 ? ? ?0 ? ? ?1 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?
Node ? ?0, zone ? ? ?DMA, type ?Reclaimable ? ? ?1 ? ? ?1 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?1 ? ? ?1 ? ? ?0 ? ? ?1 ? ? ?1 ? ? ?0?
Node ? ?0, zone ? ? ?DMA, type ? ? ?Movable ? ? ?2 ? ? ?1 ? ? ?1 ? ? ?0 ? ? ?0 ? ? ?1 ? ? ?0 ? ? ?1 ? ? ?1 ? ? ?0 ? ? ?0?
Node ? ?0, zone ? ? ?DMA, type ? ? ?Reserve ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?1 ? ? ?0?
Node ? ?0, zone ? ? ?DMA, type ? ? ? ? ?CMA ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?
Node ? ?0, zone ? ? ?DMA, type ? ? ?Isolate ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?
Node ? ?0, zone ? Normal, type ? ?Unmovable ? ? ?7 ? ? ?1 ? ? ?0 ? ? ?0 ? ? ?3 ? ? ?7 ? ? 12 ? ? ?9 ? ? ?3 ? ? ?0 ? ? ?0?
Node ? ?0, zone ? Normal, type ?Reclaimable ? ? ?1 ? ? ?1 ? ? ?3 ? ? ?2 ? ? ?2 ? ? ?0 ? ? ?1 ? ? ?0 ? ? ?0 ? ? ?1 ? ? ?0?
Node ? ?0, zone ? Normal, type ? ? ?Movable ? ?136 ? ? 90 ? ? 63 ? ? 13 ? ? ?1 ? ? ?0 ? ? ?7 ? ? ?3 ? ? ?2 ? ? ?0 ? ? 78?
Node ? ?0, zone ? Normal, type ? ? ?Reserve ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?1?
Node ? ?0, zone ? Normal, type ? ? ? ? ?CMA ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?
Node ? ?0, zone ? Normal, type ? ? ?Isolate ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?
Node ? ?0, zone ?HighMem, type ? ?Unmovable ? ? ?0 ? ? ?1 ? ? ?0 ? ? ?7 ? ? 21 ? ? 11 ? ? ?8 ? ? ?8 ? ? ?2 ? ? ?2 ? ? ?2?
Node ? ?0, zone ?HighMem, type ?Reclaimable ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?
Node ? ?0, zone ?HighMem, type ? ? ?Movable ? ? 27 ? ? 27 ? ? 42 ? ? 13 ? ? 24 ? ? ?8 ? ? ?5 ? ? ?2 ? ? ?3 ? ? ?5 ? ?148?
Node ? ?0, zone ?HighMem, type ? ? ?Reserve ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?1?
Node ? ?0, zone ?HighMem, type ? ? ? ? ?CMA ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?
Node ? ?0, zone ?HighMem, type ? ? ?Isolate ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0 ? ? ?0?


Number of blocks type ? ? Unmovable ?Reclaimable ? ? ?Movable ? ? ?Reserve ? ? ? ? ?CMA ? ? ?Isolate?
Node 0, zone ? ? ?DMA ? ? ? ? ? ?1 ? ? ? ? ? ?2 ? ? ? ? ? ?4 ? ? ? ? ? ?1 ? ? ? ? ? ?0 ? ? ? ? ? ?0?
Node 0, zone ? Normal ? ? ? ? ? 44 ? ? ? ? ? 24 ? ? ? ? ?368 ? ? ? ? ? ?2 ? ? ? ? ? ?0 ? ? ? ? ? ?0?
Node 0, zone ?HighMem ? ? ? ? ? 23 ? ? ? ? ? ?0 ? ? ? ? ?555 ? ? ? ? ? ?1 ? ? ? ? ? ?0 ? ? ? ? ? ?0?


12. oom killer
人為制造一個(gè)oom killer:
echo f > /proc/sysrq-trigger
另外,向sysrq寫入命令的幫助文件如下,上例中寫入的f: memory-full-oom-kill(f),也就是執(zhí)行oom kill
SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)

總結(jié)

以上是生活随笔為你收集整理的Linux 的内存管理工具和调优参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。