Linux 中的内存使用率经常下降

Linux 中的内存使用率经常下降

我运行的是 CentOS 5.6 (64 位) 计算机,其中运行着 Nginx (最新版本) 和 php-fpm (最新版本)。一切运行良好,但大约 2 周后,我注意到我的 Munin 图表中大约每 2 小时“缓存”使用量就会下降。之前它是一个稳定的完整图表,似乎不会时不时重置。

PHP-FPM 设置:

pm.max_children = 300
daemonize = yes
pm = static
listen = /tmp/fpm.sock
pm.max_requests = 1000

我检查了 php-fpm.log,大约每 5 秒就会有一个子进程被终止并重新启动。但这种情况一直存在,因此这无法解释突然下降的情况。

穆宁图

我只在这台机器上运行 Nginx、PHP(通过 fpm)、Munin 和 vsftpd。没有在丢失数据时运行 cron。

我的问题:什么原因造成缓存使用率下降?

答案1

我不确定 CentOS 5.6,但对于我的 Linux 2.6.32-5-amd64,添加此行/etc/sysctl.conf

vm.vfs_cache_pressure = 1

解决了这个问题。

答案2

我认为您的网络服务器中的某个大型文件是罪魁祸首。我猜是出于常规管理目的而旋转或压缩的日志。以下是一些实验,表明 Linux 在删除文件时会转储该部分缓存,包括使用 gzip 之类的实用程序。

$ free
             total       used       free     shared    buffers     cached
Mem:       4054352    3867292     187060          0      75664     390788
-/+ buffers/cache:    3400840     653512
Swap:      4194300     338344    3855956

# echo 1 > /proc/sys/vm/drop_caches
$ free
             total       used       free     shared    buffers     cached
Mem:       4054352    3420612     633740          0        292      20516
-/+ buffers/cache:    3399804     654548
Swap:      4194300     338344    3855956

但事实可能并非如此。如果文件被删除了怎么办?它还会被引用吗?

$ dd if=/dev/zero of=cachetest bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.288883 s, 726 MB/s

$ free
             total       used       free     shared    buffers     cached
Mem:       4054352    3647688     406664          0       3200     240328
-/+ buffers/cache:    3404160     650192
Swap:      4194300     338344    3855956

$ rm cachetest
$ free

             total       used       free     shared    buffers     cached
Mem:       4054352    3438508     615844          0       3208      35528
-/+ buffers/cache:    3399772     654580
Swap:      4194300     338344    3855956

并且,如果我们重新加载它然后压缩文件:

$gzip cachetest
$free
             total       used       free     shared    buffers     cached
Mem:       4054352    3439412     614940          0       3384      36404
-/+ buffers/cache:    3399624     654728
Swap:      4194300     338344    3855956

答案3

解决这个问题vm.zone_reclaim_mode = 0

相关内容