我最近为我的应用程序购买了一台运行 CentOS 和 Plesk 的专用服务器。
这些脚本在运行 CentOS 和 CPanel 的 1.5GB RAM VPS 上运行良好。
现在他们在新的专用服务器上,内存已从 14.1 GB 的 RAM 备用内存降至 9.9 GB。我看不出这是我的脚本,所以假设有其他东西占用了我所有的内存。我如何才能看到是什么消耗了所有的资源?
注意:这些服务器之间的唯一区别(从我的角度来看)是,旧服务器上每 5 分钟检查一次我的 cron,而现在每分钟检查一次,并且大约有 60 个。
这是通过 SSH 从“免费”获取的信息 - 虽然我不完全确定它告诉我什么:
[root@h31-3-244-194 ~]# free
total used free shared buffers cached
Mem: 16426796 9373260 7053536 0 390468 3471680
-/+ buffers/cache: 5511112 10915684
Swap: 18481144 0 18481144
编辑:我查看了所有 cron 进程,发现它们有:bin/qmail-queue。qmail 会不会占用内存?
如果我遗漏了一些必需的信息,请告诉我。
谢谢。
答案1
您唯一关心的数字是这个:
[root@h31-3-244-194 ~]# free
total used free shared buffers cached
Mem: 16426796 9373260 7053536 0 390468 3471680
-/+ buffers/cache: **5511112** 10915684
Swap: 18481144 0 18481144
这是用户空间进程执行时使用的内存量。内核将占用其所能获得的任何额外内存,用于磁盘缓存和其他性能原因,但它会在用户空间应用程序需要时释放这些内存。
您可能想要运行类似的程序top
并尝试找出(通过使用 %MEM 字段)是什么消耗了内存。
请记住,未使用的内存就是浪费的内存!:)
答案2
此命令将列出按内存使用情况排序的所有进程:
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r | more
第一列显示进程使用的内存百分比。您可以使用此信息找出哪个进程使用最多内存。
真正的问题是...当您仍然有 10GB 可用内存时,为什么还要关心是否使用更多内存?
答案3
我使用这个命令进行了更深入的挖掘:
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",\$x) } print "" }'
它列出了我服务器上的所有进程以及它们占用了多少内存。然后它告诉我 qmail 正在向我发送垃圾邮件。我不需要 qmail,所以已经删除了它。服务器的内存使用率从 100% 增长到 6% ... 我现在不那么讨厌 linux xD
感谢 Kyle Smith 对内存的评论和解释,但我需要将其标记为答案,因为它解释了我的脚本在此服务器上使用更多内存的确切原因。