Я запускаю машину 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. Кроны не бегают точно во время капель.
Мой вопрос: Что могло быть причиной такого падения использования кеша?
Решил, поставив vm.zone_reclaim_mode = 0
Думаю, за это отвечает какой-то большой файл, который является частью вашего веб-сервера. Я предполагаю, что журнал поворачивается или сжимается в соответствии с обычными делами. Ниже приведены некоторые эксперименты, показывающие, что 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
Я не уверен насчет CentOS 5.6, но для моего Linux 2.6.32-5-amd64 добавление этой строки в /etc/sysctl.conf
vm.vfs_cache_pressure = 1
решает эту проблему.