linux 内存不足已经解决
(2012-08-20 13:09:15)
标签:
杂谈 |
分类: Kernel |
1 linux 内存不足的现象
在正常运行的Linux系统中,系统在运行平稳之后,相应的内存的状态(free
used等)也会达到类似的一饿平衡值。当内存发生不足的时候(比如嵌入式系统没有swap区)也就是相应的物理页面被耗尽的时候,此时linux
开始回收内存和进程,就会出现OOM等问题。
当出现此问题的时候应该去分析一下原因,是否是用户内存泄漏还是其他的问题。
1) 通过free命令查看(PC下)
total
used
free
shared buffers
cached
2) 通过meminfo查看内存的使用情况
3)通过cat /proc/slabinfo
查看具体的mem使用情况。
如果上述的三种方法确认后,相应的内存确实无法再进行裁剪了,物理内存又不够了。
1
遇到内存不足的时候最好排查一下,肯定是由于应用过多或者是因为应用程序内存泄漏或者其他的原因造成这个问题。
2
通过drop_cahces的方式,可以暂时的释放掉内存,避免进行用户进程的回收。暂时可以规避一下。在有些情况下,笔者也是这么做的:),但是这个是不得已而为之的方法。还是不建议使用的。
2 内存的分析和问题的定位方法
$ free
Mem:
4105108 1584120
2520988
0 687096
701808
-/+ buffers/cache:
195216 3909892
Swap:
9805816
0
9805816
通过free 可以先直观的看到,剩余空闲的内存大小。
如果内核有OOM的现象,可以通过free查看此时的空闲内存非常的小。
$ cat meminfo
MemTotal:
4105108 kB
MemFree:
2463876 kB
Buffers:
680336
kB
Cached:
771920
kB
SwapCached:
0 kB
Active:
813956
kB
Inactive:
679508 kB
Active(anon):
22236 kB
Inactive(anon): 27432
kB
Active(file): 791720
kB
Inactive(file): 652076 kB
Unevictable:
0 kB
Mlocked:
0 kB
HighTotal:
3266440 kB
HighFree:
2445012 kB
LowTotal:
838668 kB
LowFree:
18864
kB
SwapTotal:
9805816 kB
SwapFree:
9805816 kB
Dirty:
36 kB
Writeback:
0 kB
AnonPages:
41208 kB
Mapped:
18168 kB
Shmem:
8460 kB
Slab:
91020 kB
SReclaimable:
83140 kB
SUnreclaim:
7880 kB
KernelStack:
1256 kB
PageTables:
1780 kB
NFS_Unstable:
0 kB
Bounce:
0 kB
WritebackTmp:
0 kB
CommitLimit: 11858368
kB
Committed_AS: 111000
kB
VmallocTotal: 122880
kB
VmallocUsed:
76948 kB
VmallocChunk:
38132 kB
HardwareCorrupted: 0
kB
HugePages_Total:
0
HugePages_Free:
0
HugePages_Rsvd:
0
HugePages_Surp:
0
Hugepagesize:
2048 kB
DirectMap4k:
8184 kB
DirectMap2M:
903168 kB
以上三个方法可以初步的排查,是否是因为内核或者用户程序在占用内存,达到初步定为问题的目的。
3
通过手动释放cache的形式,暂时的释放内存
1) 增大内存条(废话,条件允许,优先选择)
2)通过手动释放内存缓存的形式来进行释放。
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
4 个人意见
后一篇:用户进程和内核进程的内存分布