加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux:哪个进程占用了所有内存?

发布时间:2020-12-14 02:45:05 所属栏目:Linux 来源:网络整理
导读:我们的 linux服务器上有4GB,但我们目前只能使用~1.8GB的 java服务器,这是下面列出的第一个java进程. (200 MB是免费的,所以我们最大可以使用1.6GB 0.2GB) 当我们使用更多时,机器崩溃了.因此我们指定-Xmx1600m和-XX:MaxPermSize = 200m将服务器RAM限制为1.8GB
我们的 linux服务器上有4GB,但我们目前只能使用~1.8GB的 java服务器,这是下面列出的第一个java进程. (200 MB是免费的,所以我们最大可以使用1.6GB 0.2GB)

当我们使用更多时,机器崩溃了.因此我们指定-Xmx1600m和-XX:MaxPermSize = 200m将服务器RAM限制为1.8GB.但我们需要更多内存!剩余的RAM在哪里消失了?

这是根据内存使用量排序的程序输出(通过大’M’):

Mem:   4083952k total,3857856k used,226096k free,169320k buffers
Swap:  2104504k total,176k used,2104328k free,1939080k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                           
28155 root      16   0 1835m 1.6g 7848 S    2 40.5  47:36.26 java                                                                                              
19609 root      16   0 45996 7052 3148 S    0  0.2  14:35.97 httpd2-prefork                                                                                    
 6802 root      16   0 46132 5916 1932 S    0  0.1   0:00.09 httpd2-prefork                                                                                    
 6866 root      15   0 46132 5916 1932 S    0  0.1   0:00.07 httpd2-prefork

正如您所看到的,httpd2-prefork进程有很多(甚至更多).但即使我累积了字节(25 * ~46KB = ~1MB),它也永远不会那么大.

free -m print:

total       used       free     shared    buffers     cached
Mem:          3988       3768        219          0        165       1894
-/+ buffers/cache:       1708       2279
Swap:         2055          0       2055

我的错误在哪里?我可以调整服务器以为java进程提供更多RAM吗?

顺便说一句:我们没有使用像here这样的虚拟机

更新

正如评论中指出的那样:它只是一个32位内核:-((通过uname -a).
所以我至少只能使用3GB?
但服务器本身似乎是64位?由于输出中的lm(长模式)?

grep flags /proc/cpuinfo
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid cx16 xtpr
...

Here是另一个非常相似的问题.

解决方法

啊,我发现你误解了如何计算Linux中的空闲RAM.

Linux倾向于通过缓存内容来大量利用所有RAM.它不是每次都从磁盘读取目录列表,而是将目录条目缓存在RAM中.它会缓存常用文件,因此不需要每次都从磁盘加载它们.如果某个进程实际需要RAM供其使用,则将立即逐出缓存.

所以计算实际使用的RAM的公式是总计 – (缓存的空闲缓冲区),在你的情况下为3988 – (219 165 1894)或换句话说3988 – 2278.这是1710兆字节的RAM和2278兆字节的RAM用于你还是要消费.

不相信我?请注意,您的服务器甚至没有使用任何交换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读