Mem: 8176880k total, 8059736k used, 117144k free, 93040k buffers
Swap: 1004052k total, 108k used, 1003944k free, 7257056k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4992 mysql 20 0 291m 115m 5380 S 65 1.4 739:54.71 mysqld
20260 apache 20 0 43032 18m 3964 S 27 0.2 0:02.50 apache2
20154 apache 20 0 41588 16m 3964 S 10 0.2 0:00.40 apache2
<snip>
这是吗:内存:总计 8176880k,已使用 8059736k;有什么可担心的!?
还有想法吗?
非常感谢
编辑:忘了说我对服务器一无所知,我已经遇到了这个......
回答:
> free -m
total used free shared buffers cached
Mem: 7985 7665 320 0 89 6942
-/+ buffers/cache: 633 7352
Swap: 980 0 980
看起来我并没有记忆问题
答案1
这很好 - 使用时 VIRT 值通常在这个数字附近prefork.c
(我假设你正在使用):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10385 apache 15 0 376m 48m 3932 R 20.3 1.2 0:01.34 httpd
10423 apache 16 0 376m 46m 4576 S 15.0 1.2 0:01.09 httpd
10153 apache 15 0 337m 61m 4672 S 11.6 1.6 0:03.94 httpd
10419 apache 15 0 383m 54m 4696 S 11.6 1.4 0:01.00 httpd
您要监视的值是 RES - 这是子线程消耗的最大内存量的大小(在我的例子中,PHP 作为该线程的一部分运行,因此在加载库和数据时会出现“膨胀”)。线程不会释放分配的内存,但是当 apache 进程在其 maxrequests 之后按照以下方式终止线程时
<IfModule prefork.c>
MaxRequestsPerChild 1000
该线程将返回到其本机内存消耗。
要降低这些值,请确保您只加载所需的 apache 模块,并在运行非常大的 PHP 脚本时监视 apache 的线程(ini_set('memory_limit', '128M');
然后递归地将数据加载到数组中 - 应该可以做到)。然后,在实际使用过程中,降低 MaxRequestsPerChild 值,直到您看到 apacheRES
处于合理的水平。
以下是一些有用的参数调整文章:
答案2
没关系。可用内存是指系统、应用程序和缓存未使用的 RAM。您可以将“缓冲区”和“缓存”视为另一个可用 RAM。因此,您有大约 7 GB 的可用 RAM。使用以下命令:
free
您可以在以下行中看到“实际”可用 RAM:-/+ buffers/cache。您也可以使用 htop。