Chinaunix

标题: 请教一个linux内存管理的问题.....内存占用99% [打印本页]

作者: sc66    时间: 2008-11-28 14:07
标题: 请教一个linux内存管理的问题.....内存占用99%
total       used       free     shared    buffers     cached
Mem:       4039768    3956896      82872          0      85872     691232
-/+ buffers/cache:    3179792     859976
Swap:      4194296        160    4194136
共享内存设置
kernel.shmmax=4294967295
vm.nr_hugepages=1300
jvm CATALINA_OPTS='-server -Xms2304m -Xmx2304m -Xmn640m -Xss256k -XX:+UseLargePages -XX:+UseConcMarkSweepGC'
其他没有什么了...
top 下只有java程有时占了70%左右的内存...
内存如下使有情况应用程序(java1.5 tomcat5.5 系统Red Hat Enterprise Linux AS release 4 (Nahant Update 4))
没什么其它问...反还可以...只是内存占用太多
请教如上信息...系统的问题可能出在哪儿了
作者: sc66    时间: 2008-11-28 15:02
问一下 太简单了!!!没人愿意讲....
作者: qucklay    时间: 2008-11-28 15:09
大侠们都说LINUX比XP先进,不浪费内存,有多少用多少。
作者: sc66    时间: 2008-11-28 15:26
大侠们都说LINUX比XP先进,不浪费内存,有多少用多少 谢谢
我都在用swap了啊!!还行吗?
作者: sc66    时间: 2008-11-28 15:39
问一下有没什么命令可以释放cache 不用重启主机
作者: qucklay    时间: 2008-11-28 15:46
SWAP中的内容是内存中系统不常用到的数据,暂时放在SWAP里,所以SWAP中的内容可能是内存不在需要的数据,也可是以后会在使用到的。
作者: sc66    时间: 2008-11-28 15:51
我想问一下以前这儿有编贴子讲centos /proc/sys/vm/drop_caches 的值可以自动释放cache....而redhat as4没有这参数 有其他办释放吗....老大要求我把它释放掉没办法...问问大家

[ 本帖最后由 sc66 于 2008-11-28 16:09 编辑 ]
作者: 3c905_sh    时间: 2008-11-28 17:07
细心的朋友会注意到,当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.

先来说说free命令

[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511

其中:

total 内存总数

used 已经使用的内存数

free 空闲的内存数

shared 多个进程共享的内存总额

buffers Buffer Cache和cached Page Cache 磁盘缓存的大小

-buffers/cache 的内存数:used - buffers - cached

+buffers/cache 的内存数:free + buffers + cached

可用的memory=free memory+buffers+cached

有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94

那么我们来看看,如果我执行复制文件,内存会发生什么变化.

[root@server ~]# cp -r /etc ~/test/
[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511

在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.

引用http://www.wujianrong.com/archives/2007/09/linux_free.html"为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"

那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放>?

[root@server test]# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511

MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:

[root@server test]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0

[root@server test]# sync

手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3

将/proc/sys/vm/drop_caches值设为3

[root@server test]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511

再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.

有关/proc/sys/vm/drop_caches的用法在下面进行了说明

/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.

To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.

Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync( first.
作者: sc66    时间: 2008-11-28 17:22
3c905_sh  谢谢!!
/proc/sys/vm/drop_caches
Red Hat Enterprise Linux AS release 4 (Nahant Update 4) 此系没有上述参数我想问一下能如何修改
谢谢!!!
作者: 3c905_sh    时间: 2008-11-28 17:41
你的系统的值是正常的, 这个是linux 的内存使用机制! 不需要修改, 没有必要修改!
作者: sc66    时间: 2008-11-28 17:50
3c905_sh 谢谢
老大不这么认为啊我没办法 叫我一定要把他搞定....我想问你一下Red Hat Enterprise Linux AS release 4 (Nahant Update 4)能行吗? 好像centos有drop_caches这个参数
作者: ddb521    时间: 2008-11-28 18:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: Au_Hank    时间: 2008-11-29 08:57
原帖由 sc66 于 2008-11-28 17:50 发表
3c905_sh 谢谢
老大不这么认为啊我没办法 叫我一定要把他搞定....我想问你一下Red Hat Enterprise Linux AS release 4 (Nahant Update 4)能行吗? 好像centos有drop_caches这个参数

你老大是错误的。
系统的CACHE和BUFFER占的内存越多,系统的性能越好。如果CACHE和BUFFER都无法分配到内存的话,那所有数据都必须
直接从硬盘存取,你能想象那样的性能会是什么样子?系统就差不多完蛋了。

真正想降低内存的使用的话,应该别用该死的JAVA,用C来写应用
现实点的话就加MEM吧
作者: Au_Hank    时间: 2008-11-29 09:02
原帖由 sc66 于 2008-11-28 15:26 发表
大侠们都说LINUX比XP先进,不浪费内存,有多少用多少 谢谢
我都在用swap了啊!!还行吗?

SWAP被用到一些不代表什么,可能是某个时间MEM暂时不够用就使用了SWAP,但是大部分时间MEM是够用的。
被SWAP OUT的内容,系统是不会把它清除的,因为系统认为以后可能能用上,哪怕实际上可能根本用不上。
作者: changzi100    时间: 2008-11-29 09:30
8楼讲解得很好,路过学习中。
作者: chenyx    时间: 2008-11-29 09:34
嗯,pf8楼的
作者: hurb    时间: 2008-11-30 21:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: cindymusic    时间: 2008-12-01 02:28
这种状态是不正常的
java程序的问题,是内存泄漏,查查程序吧,有没有用完内存不擦屁股的地方块字
作者: xiehc    时间: 2008-12-01 10:22
不好意思 ,没太明白你问的是什么意思?
作者: ligyf    时间: 2008-12-01 14:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: coolerfeng    时间: 2008-12-02 10:06
java的虚拟堆就设了2304M,两个java进程就会把4G用完,当然内存耗的凶了,想省内存就把这个虚拟堆设小点。
作者: ruochen    时间: 2008-12-02 10:13
学习学习
作者: mfjoy    时间: 2008-12-03 00:38
呵呵
vm.swappiness 参数仔细研究一下吧
作者: 我为人民服务    时间: 2008-12-04 00:22
哈哈,这是linux的内存机制,是很正常的!不要以windows那种观念来看啊!虽然有利有弊,但个人认为利远远大于弊。
作者: shichunda    时间: 2008-12-04 09:34
就像楼上的一位仁兄问的,AS4中没有cache ,buffer释放的机制吗?先别说有没有用,只是想学习一下。谢谢
作者: satfire    时间: 2008-12-11 22:16
fedora10:
[root@TA /]# cat /proc/sys/vm/drop_caches
0
作者: sc66    时间: 2008-12-12 13:10
vm.swappiness 参数仔细研究一下吧 谢谢!!!mfjoy  
这个只是针对交换分区 这台服务器配置是我的前任配的 ...我刚到公司 他这儿是kerner.shmmax设得太大了.....不过好像as4 没有vm/drop_caches 这个选 项 实在不想让他报警就设一个minfree.....的值
作者: zhangwei401    时间: 2008-12-15 15:57
JVM 堆内存设置的太大了,我每秒并发2W个连接 刚设到2G堆内存。
作者: sc66    时间: 2008-12-15 16:18
JVM 堆内存设置的太大了,我每秒并发2W个连接 刚设到2G堆内存。
我这儿这两个值被他设得太猛了....物理内存 全被 kernel.shmmax占用了
kernel.shmmax=4294967295
vm.nr_hugepages=1300
作者: flybean    时间: 2008-12-25 08:39
kernel.shmmax=4294967295并不等于物理内存 全被 kernel.shmmax占用了,两码事

两个JVM,各占2G,不给系统活路了
作者: simonfirst    时间: 2008-12-25 13:01
楼上兄弟说得对,这是linux内存使用机制来的!!
作者: leshy    时间: 2008-12-26 17:26
原帖由 sc66 于 2008-11-28 17:22 发表
3c905_sh  谢谢!!
/proc/sys/vm/drop_caches
Red Hat Enterprise Linux AS release 4 (Nahant Update 4) 此系没有上述参数我想问一下能如何修改
谢谢!!!



  1. [root@localhost ~]# uname -a
  2. Linux localhost.localdomain 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux           
  3. [root@localhost ~]# cat /etc/redhat-release
  4. Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
  5. [root@localhost ~]#
  6. [root@localhost ~]#
  7. [root@localhost ~]# cat /proc/sys/vm/drop_caches
  8. 0
  9. [root@localhost ~]#
复制代码


我的主版本和你的一样,有这个文件啊?
作者: jelver    时间: 2009-11-09 14:51
学习8楼同志的认真讲解,谢谢
作者: jerryjzm    时间: 2009-11-09 16:21
这么老的帖子。
感谢8楼,研究很深入,回头自己再好好看看!
作者: jerryjzm    时间: 2009-11-10 11:12
原帖由 3c905_sh 于 2008-11-28 17:07 发表
那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放>?

[root@server test]# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511

MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!


这里有点疑义,今天做了下试验,cp确实是,但是,在我重新启用其他服务,cache就释放了

[root@test1 network-scripts]# free -m
             total       used       free     shared    buffers     cached
Mem:           249        242          6          0          7        192
-/+ buffers/cache:         42        207
Swap:          509          0        509
[root@test1 network-scripts]# free -m
             total       used       free     shared    buffers     cached
Mem:           249        242          6          0          7        192
-/+ buffers/cache:         41        207
Swap:          509          0        509
[root@test1 network-scripts]# ps -ef|grep vnc
root      5614  5367  0 11:55 pts/0    00:00:00 grep vnc
[root@test1 network-scripts]# vncserver :1

New 'test1:1 (root)' desktop is test1:1

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/test1:1.log

[root@test1 network-scripts]# free -m
             total       used       free     shared    buffers     cached
Mem:           249        222         27          0          9        135
-/+ buffers/cache:         76        172
Swap:          509          0        509



这个符合自动释放的解释
作者: jiang870320    时间: 2009-11-10 17:05
这就是linux比windows强的一个方面!很正常
作者: pizigou    时间: 2011-05-26 00:45
不愧是精华贴!非常经典,看了非常受益。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2