加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux 内存不足已经解决

(2012-08-20 13:09:15)
标签:

杂谈

分类: Kernel
1 linux 内存不足的现象
   在正常运行的Linux系统中,系统在运行平稳之后,相应的内存的状态(free used等)也会达到类似的一饿平衡值。当内存发生不足的时候(比如嵌入式系统没有swap区)也就是相应的物理页面被耗尽的时候,此时linux 开始回收内存和进程,就会出现OOM等问题。
    当出现此问题的时候应该去分析一下原因,是否是用户内存泄漏还是其他的问题。

2 内存的分析和问题的定位方法
  1) 通过free命令查看(PC下)
$ free
             total       used       free     shared    buffers     cached
Mem:       4105108    1584120    2520988          0     687096     701808
-/+ buffers/cache:     195216    3909892
Swap:      9805816          0    9805816
通过free 可以先直观的看到,剩余空闲的内存大小。
如果内核有OOM的现象,可以通过free查看此时的空闲内存非常的小。
  2) 通过meminfo查看内存的使用情况
$ 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)通过cat /proc/slabinfo 查看具体的mem使用情况。
以上三个方法可以初步的排查,是否是因为内核或者用户程序在占用内存,达到初步定为问题的目的。

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 个人意见 
  1 遇到内存不足的时候最好排查一下,肯定是由于应用过多或者是因为应用程序内存泄漏或者其他的原因造成这个问题。
  2 通过drop_cahces的方式,可以暂时的释放掉内存,避免进行用户进程的回收。暂时可以规避一下。在有些情况下,笔者也是这么做的:),但是这个是不得已而为之的方法。还是不建议使用的。
    



   

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有