【mos文章から翻訳する】Linuxオペレーティングシステムのメモリ使用
8972 ワード
Linuxオペレーティングシステムのメモリ使用源は、Linux System Memory Utilization(文書ID 1514705.1)です.
適用:Linux OS-Version Oracle Linux 5.0 to Oracle Linux 6.4[Release OLED 5 to OL 6 U 4]Information in this document aplies to any pltform.
目的:いくつかのLinuxユーザーはLinuxメモリの使用に混乱が生じるかもしれません.アプリケーションの使用メモリはfreeコマンドの報告書のメモリと一致しません.
問題と答え:
問題1:free命令の出力をどう読みますか?
回答1;free命令の出力には5行の出力があり、メモリの使用には2行目と3行目に関心があります.
回答1.1:オペレーティングシステムの観点から:2行目はオペレーティングシステムの観点からのメモリ使用状況:
7880 MB
Total memory
6934 MB
Used memory,which includ the buffers&cached.
170 MB
Memory used for buffers、which was relatively temporary storge for raw disk blocks、shordn't get trements dously large.
3631 MB
Memory used for cached,which was In-memory cache for files the disk(the pagecache,as well as dentry cache,and inode cache)
The buffer/cacheはI/O性能を向上させます.アプリケーションが必要となると、The buffer/cacheはオペレーティングシステムに返却されます.最近使っているメモリの一部はオペレーティングシステムに返されない場合があります.
回答1.3:より正確な:cached memoryを解放することができますが、Linuxカーネルは最近使っているfileのcachesを回収しません.必要でない限り、必要です.最近使っているfileのcachesをリリースすると性能が低下する可能性があります.
proc/meminfoの中には2つの場所があります.Active:最近使っているバfferとcacheのメモリの合計は、Inactiveは通常回収されません.最近使われていないバfferとcacheのメモリの合計は、Linuxカーネルによって回収されます.
問題2:どのように強制的にcachedのメモリを釈放しますか?一般的にcachedのメモリを釈放することを奨励しません.メモリ上の圧力がない限り、会いましょう.How to Check Whether a System is Under Memory Presure(Note 1503.11)
もしあなたが確かにdropのようにcachedメモリを落としたら、フォローしてください.
1)flush file system buffers〹sync;syncsync 2)drop cached memory Linux kernel文書によると、writing to/proc/sys/vm/drop_caches will cause the kersnel to drop clean caches、dentries and inodes from memory、causing that memory to become free.
問題3:cachedのメモリはどうやってシステムの性能を高めますか?
Here's an example will show the difference.
The initial state:
問題4:どのように特定のプロセスのメモリを取得しますか?特定のプロセスに対して、メモリ消費を得るための正確な方法はありません.
1)Linux would not load the entire resource(VSZ)into memory、but only part of them are residential on the physical memory(RSS)
For example、the Virtual memory size required by bash was 10500 KB、but only 1864 KB are redential on memory.
For example、in the follwing output、ld-2.1 so、libc-2.12 so、libdl-2.12.so、and libnss_files-2.12 so are shared libries,which may be used by other processes as well.
問題5:Huggesが有効にされている場合:
Please see the follwing note for hugepage:
Huge Pages on Linux:What It Is…and What It Is Not…(Doc ID 361323.1)
When hugepage is enabled,kersnel reerved a specifriend amount memory for hugepage.Only the apport hugepage such as Oracle Database With profigration are able to make use of hugepage.Touage page.Toverige
Part of the hugepage were unused and wasted、the amounts equal to(Huge Pages-HuFree-Hugges Pagesvd)*Hugepagesize、
That's(600-400)*2048 kb wasted.
It's very importent not to waste hugepage,since most apport it.
For Oracle Database,please follow this note for proper hugepage configration.
Shell Script to Calculate Values Recommanded Linux Hugges/HugleTLB Cofigration(Doc ID 401749.1)
適用:Linux OS-Version Oracle Linux 5.0 to Oracle Linux 6.4[Release OLED 5 to OL 6 U 4]Information in this document aplies to any pltform.
目的:いくつかのLinuxユーザーはLinuxメモリの使用に混乱が生じるかもしれません.アプリケーションの使用メモリはfreeコマンドの報告書のメモリと一致しません.
問題と答え:
問題1:free命令の出力をどう読みますか?
[root@localhost /]# free -tm
total used free shared buffers cached
Mem: 7880 6934 945 0 170 3631
-/+ buffers/cache: 3133 4747
Swap: 8191 0 8191
Total: 16072 6934 9137
なぜこのサーバーは945 Mのメモリしかないですか?どのプロセスがこんなに多くのメモリを消費しましたか?回答1;free命令の出力には5行の出力があり、メモリの使用には2行目と3行目に関心があります.
回答1.1:オペレーティングシステムの観点から:2行目はオペレーティングシステムの観点からのメモリ使用状況:
7880 MB
Total memory
6934 MB
Used memory,which includ the buffers&cached.
170 MB
Memory used for buffers、which was relatively temporary storge for raw disk blocks、shordn't get trements dously large.
3631 MB
Memory used for cached,which was In-memory cache for files the disk(the pagecache,as well as dentry cache,and inode cache)
The buffer/cacheはI/O性能を向上させます.アプリケーションが必要となると、The buffer/cacheはオペレーティングシステムに返却されます.最近使っているメモリの一部はオペレーティングシステムに返されない場合があります.
[root@szem6 /]# cat /proc/meminfo |grep Active:
Active: 2900528 kB
回答1.2:アプリケーションの観点から、'used'memoryから'buffers'and'cached'を削除した後、アプリケーションから見たメモリの使用状況を得ることができます.残りのメモリは以下の通りです.free + buffers + cached:
945 + 170 + 3631 = 4747MB
使用済みメモリは以下の通りです.used - buffers - cached:
6934 - 170 - 3631 = 3133MB
これはまさに私達がfreeの出力の第3行から見ることができるのです.3133 MB used、and 4747 MB free.回答1.3:より正確な:cached memoryを解放することができますが、Linuxカーネルは最近使っているfileのcachesを回収しません.必要でない限り、必要です.最近使っているfileのcachesをリリースすると性能が低下する可能性があります.
proc/meminfoの中には2つの場所があります.Active:最近使っているバfferとcacheのメモリの合計は、Inactiveは通常回収されません.最近使われていないバfferとcacheのメモリの合計は、Linuxカーネルによって回収されます.
# cat /proc/meminfo
MemTotal: 8069496 kB
MemFree: 6369944 kB
Buffers: 341724 kB
Cached: 414800 kB
SwapCached: 0 kB
Active: 839852 kB
Inactive: 503996 kB
[SNIP]
したがって、残りのメモリは、MemFree+Inactiveであり、優れた性能を持つシステムであると考えられます.free+buffers+cachedはボトムラインです.問題2:どのように強制的にcachedのメモリを釈放しますか?一般的にcachedのメモリを釈放することを奨励しません.メモリ上の圧力がない限り、会いましょう.How to Check Whether a System is Under Memory Presure(Note 1503.11)
もしあなたが確かにdropのようにcachedメモリを落としたら、フォローしてください.
1)flush file system buffers〹sync;syncsync 2)drop cached memory Linux kernel文書によると、writing to/proc/sys/vm/drop_caches will cause the kersnel to drop clean caches、dentries and inodes from memory、causing that memory to become free.
To free pagecache:
# echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
# echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
# echo 3 > /proc/sys/vm/drop_caches
問題3:cachedのメモリはどうやってシステムの性能を高めますか?
Here's an example will show the difference.
The initial state:
[root@localhost /]$ free -m
total used free shared buffers cached
Mem: 7880 6427 1452 0 438 3321
-/+ buffers/cache: 2667 5213
Swap: 8191 0 8191
Create a new file of 200 MB、we can also see the cached increase ed by 200 MB、exactly the same size of the newly create file.[root@localhost /]$ dd if=/dev/zero of=/tmp/test.img bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.12154 s, 1.7 GB/s
[root@localhost /]$ free -m
total used free shared buffers cached
Mem: 7880 6612 1267 0 438 3512
-/+ buffers/cache: 2661 5219
Swap: 8191 0 8191
With the file cached,do a I/O test on it.[root@localhost /]$ time cat /tmp/test.img >/dev/null
real 0m0.102s
user 0m0.000s
sys 0m0.038s
Drop the cached memory,so the file was not cached anymore.[root@localhost /]# echo 3 > /proc/sys/vm/drop_caches
[root@localhost /]# free -m
total used free shared buffers cached
Mem: 7880 2843 5036 0 1 311
-/+ buffers/cache: 2529 5350
Swap: 8191 0 8191
Redo the test,the reult was about 20 times slower than the cached.[root@localhost /]# time cat /tmp/bigfile > /dev/null
real 0m2.016s
user 0m0.001s
sys 0m0.128s
問題4:どのように特定のプロセスのメモリを取得しますか?特定のプロセスに対して、メモリ消費を得るための正確な方法はありません.
1)Linux would not load the entire resource(VSZ)into memory、but only part of them are residential on the physical memory(RSS)
For example、the Virtual memory size required by bash was 10500 KB、but only 1864 KB are redential on memory.
[root@localhost /]# ps aux | head -1; ps aux | grep 16222
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 16222 0.0 0.0 108500 1864 pts/13 S 11:33 0:00 -bash
2)Many libries are shared between processes、they only consume 1 copy of the memory for many different processes.For example、in the follwing output、ld-2.1 so、libc-2.12 so、libdl-2.12.so、and libnss_files-2.12 so are shared libries,which may be used by other processes as well.
[root@localhost /]# pmap -x 16222
16222: -bash
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 848 572 0 r-x-- bash
00000000006d3000 40 40 40 rw--- bash
00000000006dd000 20 20 20 rw--- [ anon ]
00000000008dc000 36 8 0 rw--- bash
00000000008e5000 380 252 252 rw--- [ anon ]
000000367d200000 128 108 0 r-x-- ld-2.12.so
000000367d41f000 4 4 4 r---- ld-2.12.so
000000367d420000 4 4 4 rw--- ld-2.12.so
000000367d421000 4 4 4 rw--- [ anon ]
000000367d600000 1572 568 0 r-x-- libc-2.12.so
000000367d789000 2048 0 0 ----- libc-2.12.so
000000367d989000 16 16 4 r---- libc-2.12.so
000000367d98d000 4 4 4 rw--- libc-2.12.so
000000367d98e000 20 16 16 rw--- [ anon ]
000000367de00000 8 8 0 r-x-- libdl-2.12.so
000000367de02000 2048 0 0 ----- libdl-2.12.so
000000367e002000 4 4 4 r---- libdl-2.12.so
000000367e003000 4 4 4 rw--- libdl-2.12.so
000000368e600000 116 60 0 r-x-- libtinfo.so.5.7
000000368e61d000 2048 0 0 ----- libtinfo.so.5.7
000000368e81d000 16 12 4 rw--- libtinfo.so.5.7
00007ffff1f40000 96836 60 0 r---- locale-archive
00007ffff7dd1000 48 24 0 r-x-- libnss_files-2.12.so
00007ffff7ddd000 2048 0 0 ----- libnss_files-2.12.so
00007ffff7fdd000 4 4 4 r---- libnss_files-2.12.so
00007ffff7fde000 4 4 4 rw--- libnss_files-2.12.so
00007ffff7fdf000 12 12 12 rw--- [ anon ]
00007ffff7ff4000 8 8 8 rw--- [ anon ]
00007ffff7ff6000 28 20 0 r--s- gconv-modules.cache
00007ffff7ffd000 4 4 4 rw--- [ anon ]
00007ffff7ffe000 4 4 0 r-x-- [ anon ]
00007ffffffde000 132 20 20 rw--- [ stack ]
ffffffffff600000 4 0 0 r-x-- [ anon ]
---------------- ------ ------ ------
total kB 108500 1864 412
問題5:Huggesが有効にされている場合:
Please see the follwing note for hugepage:
Huge Pages on Linux:What It Is…and What It Is Not…(Doc ID 361323.1)
When hugepage is enabled,kersnel reerved a specifriend amount memory for hugepage.Only the apport hugepage such as Oracle Database With profigration are able to make use of hugepage.Touage page.Toverige
# cat /proc/meminfo
[SNIP]
HugePages_Total: 1000
HugePages_Free: 600
HugePages_Rsvd: 400
HugePages_Surp: 0
Hugepagesize: 2048 kB
[SNIP]
In the above example,kenel reerved 1000*2048 kB(Huge Pages_Total*Hugepage size)for hugepage.Part of the hugepage were unused and wasted、the amounts equal to(Huge Pages-HuFree-Hugges Pagesvd)*Hugepagesize、
That's(600-400)*2048 kb wasted.
It's very importent not to waste hugepage,since most apport it.
For Oracle Database,please follow this note for proper hugepage configration.
Shell Script to Calculate Values Recommanded Linux Hugges/HugleTLB Cofigration(Doc ID 401749.1)