Задать вопрос

Как избавиться от SIGBUS при работе php-fpm?

Поднял веб-сервер с nginx + php-fpm + symfony1.4, работают скрипты использующие MySQL, APC, Memcached



Тестирую сервер под нагрузкой в течении длительного времени, смотрю логи:

Jun 22 17:54:13.793226 [WARNING] [pool www] child 27950 exited on signal 7 SIGBUS after 82.113882 seconds from start
Jun 22 17:54:13.793555 [NOTICE] [pool www] child 27978 started
Jun 22 17:57:05.123482 [WARNING] [pool www] child 27978 exited on signal 7 SIGBUS after 171.329932 seconds from start
Jun 22 17:57:05.123796 [NOTICE] [pool www] child 28069 started
Jun 22 17:59:56.901823 [WARNING] [pool www] child 28070 exited on signal 7 SIGBUS after 169.362491 seconds from start
Jun 22 17:59:56.902103 [NOTICE] [pool www] child 28105 started
Jun 22 18:03:03.044205 [WARNING] [pool www] child 28206 exited on signal 7 SIGBUS after 91.774054 seconds from start
Jun 22 18:03:03.044678 [NOTICE] [pool www] child 28226 started
Jun 22 18:03:57.233633 [WARNING] [pool www] child 28228 exited on signal 7 SIGBUS after 39.234232 seconds from start
Jun 22 18:03:57.233907 [NOTICE] [pool www] child 28235 started
Jun 22 18:04:30.170006 [WARNING] [pool www] child 28235 exited on signal 7 SIGBUS after 32.936104 seconds from start
Jun 22 18:04:30.170279 [NOTICE] [pool www] child 28253 started
Jun 22 18:05:25.752235 [WARNING] [pool www] child 28264 exited on signal 7 SIGBUS after 40.075326 seconds from start
Jun 22 18:05:25.752519 [NOTICE] [pool www] child 28339 started
Jun 22 18:07:55.575072 [WARNING] [pool www] child 28358 exited on signal 7 SIGBUS after 52.005688 seconds from start
Jun 22 18:07:55.575345 [NOTICE] [pool www] child 28365 started
Jun 22 18:09:17.171426 [WARNING] [pool www] child 28376 exited on signal 7 SIGBUS after 43.982024 seconds from start
Jun 22 18:09:17.171846 [NOTICE] [pool www] child 28403 started




Иногда веб-сервер по непонятным причинам вообще подвисает…

Помогите разобраться, если кто сталкивался.



Всю необходимую информацию, логи и т.п. предоставлю
  • Вопрос задан
  • 6166 просмотров
Подписаться 6 Оценить 6 комментариев
Решения вопроса 1
multifinger
@multifinger Автор вопроса
Нашел решение, по крайней мере производительность выросла и SIGBUS больше вообще не встречается.

Во первых:
#/etc/php5/fpm/pool.d/www.conf
pm.max_children = 80 << 2000Mb (total_fpm_memory) / 25Mb (one fpm process memory usage)
pm.max_spare_servers = 20
pm.max_requests = 200

Это в целом улучшает стабильность, параметры расчитываются индивидуально
в этом же файле временно можно включить и посмотреть медленные запросы:

#slowlog = /var/log/php-fpm-slow.log
#request_slowlog_timeout = 5s
#listen.backlog = -1


Далее:
#/etc/php5/conf.d/apc.ini
[APC]
extension = apc.so
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 256
apc.optimization = 0
apc.num_files_hint = 10000
apc.user_entries_hint = 10000
apc.ttl = 0
apc.user_ttl = 0
apc.gc_ttl = 600
apc.cache_by_default = 1
apc.filters = "apc\.php$"
apc.slam_defense = 0
apc.use_request_time = 1
apc.mmap_file_mask = /tmp/apc.XXXXXX
apc.file_update_protection = 2
apc.enable_cli = 0
apc.max_file_size = 5M
<b>apc.stat = 0</b>
apc.write_lock = 1
apc.report_autofilter = 0
apc.include_once_override = 0
apc.rfc1867 = 0
apc.rfc1867_prefix = "upload_"
apc.rfc1867_name = "APC_UPLOAD_PROGRESS"
apc.rfc1867_freq = 0
apc.localcache = 1
apc.localcache.size = 512
apc.coredump_unmap = 0
apc.stat_ctime = 0


Тут на самом деле ключевой была только настройка apc.stat = 0, остальное можно выкинуть

Собственно именно добавление apc.stat = 0 позволило устранить SIGBUS ошибку, теперь в логах только уведомления о том что дочерние процессы перезапускаются (из-за pm.max_request)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@NiGHt_LEshiY
Попробуйте отключить кэширование (начать лучше с APC), если это возможно, и перезапустите php.
Есть такое чувство, что APC виноват в том, что лезет «не туда» куда следует в смысле памяти.
Ответ написан
VBart
@VBart
Обновляться уже пробовали?
Ответ написан
Комментировать
@Psih
Веб разработчик, совладелец Areto Development
А вы error_log в php.ini настроили? Если нет — включите, если да — то посмотрите что там. Уж очень похоже на то, что у вас памяти не хватает скрипту.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы