Некоторое время назад мы столкнулись с интересной проблемой. Иногда (не каждый раз, давайте представим, что почти каждые 100-200 обращений) session_start() занимает очень много времени. До 60 секунд. (самый долгий был 63, обычно около 50).
На сервере установлена CentOS 6.5 (ядро Linux 2.6.32-431.17.1.el6.x86_64) nginx/1.4.7 (да, я знаю, что он старый) + Apache/2.2.15 + PHP 5.3.3 (используется mod_php) Два SSD-накопителя Intel 530 создают Raid 0. Свободной оперативной памяти много — 5+ ГБ. Я пытался настроить значение vm.swappiness, возможно, это из-за какой-то транзакции памяти с диском. Не помогло.
Это происходит, даже если на сервере почти нет нагрузки.
Сессия хранится в файлах. Поместите сессии на ramdrive (tmpfs). Не помогло. В каталоге около пары сотен файлов сессий. Так что проблем с поиском быть не должно. Иногда та же проблема возникает при include/require, php тратит секунды на загрузку файла перед началом его обработки. Так что это какая-то проблема с io. atop/top не показал ничего необычного, пока процесс запуска сессии зависал.
вывод free -m во время зависания
total used free shared buffers cached
Mem: 32101 23485 8616 0 1532 15642
-/+ buffers/cache: 6310 25790
Swap: 16383 1222 15160
свободный -m вывод нормальный
total used free shared buffers cached
Mem: 32101 23438 8662 0 1532 15623
-/+ buffers/cache: 6281 25819
Swap: 16383 1222 15160
nginx записывает это в журнал во время замедления
2015/09/29 15:40:36 [warn] 16854#0: *14779 ответ восходящего потока буферизуется во временный файл /var/cache/nginx/proxy_temp/1/02/0000000021 при чтении восходящего потока
пробовал устанавливать proxy_max_temp_file_size, но не помогло.
Может кто знает в чем может быть причина, или в этом направлении копать