Вопрос: Apache отключается непреднамеренно


Я должен сказать, что я не парень, который настроил сервер, но бедному соку поручили выяснить, что происходит на данный момент. У меня только грубые знания об apache и linux, поэтому, пожалуйста, несите меня ...

Проблема

Наш сервер apache отключается (в основном в ночное время) и не может восстановиться и снова начать резервное копирование, без каких-либо реальных сообщений.

Из того, что я могу собрать, здесь интересна следующая строка в журналах ошибок apache;

[Wed Apr 15 03:43:02.114879 2015] [mpm_prefork:notice] [pid 25778] AH00171: Graceful restart requested, doing restart

После чего очень long stacktrace, вот первые несколько строк:

*** Error in `/usr/sbin/httpd': free(): invalid pointer: 0x00007f581d5c13c0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7d19d)[0x7f583b69519d]
/etc/httpd/modules/libphp5.so(php_module_shutdown+0x2b)[0x7f58301d255b]
/etc/httpd/modules/libphp5.so(php_module_shutdown_wrapper+0x9)[0x7f58301d2619]
[...]

Задняя часть продолжается, но интересная вещь здесь заключается в том, что между Error in /usr/sbin/httpd [...] повторяется 5 раз, пока последнее сообщение не будет

[Wed Apr 15 03:43:02.269626 2015] [core:notice] [pid 25778] AH00060: seg fault or similar nasty error detected in the parent process

Следующее сообщение появится на следующий день, когда я снова загружу сервер;

[Wed Apr 15 08:14:46.200884 2015] [core:notice] [pid 30326] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Wed Apr 15 08:14:46.215410 2015] [suexec:notice] [pid 30326] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Wed Apr 15 08:14:46.235346 2015] [auth_digest:notice] [pid 30326] AH01757: generating secret for digest authentication ...
[Wed Apr 15 08:14:46.236045 2015] [lbmethod_heartbeat:notice] [pid 30326] AH02282: No slotmem from mod_heartmonitor
[Wed Apr 15 08:14:46.280992 2015] [core:warn] [pid 30326] AH00098: pid file /run/httpd/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Wed Apr 15 08:14:46.284919 2015] [mpm_prefork:notice] [pid 30326] AH00163: Apache/2.4.6 (CentOS) PHP/5.4.16 configured -- resuming normal operations
[Wed Apr 15 08:14:46.284939 2015] [core:notice] [pid 30326] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

мысли

Как я вижу, PreFork-модуль каким-то образом запрашивает, что процесс apache (или один из них?) отключается. Это терпит неудачу, и в итоге все вещи просто терпят крах.

Вопросов

В первую очередь: мой анализ - проблема с сбоем сервера - это PreFork модуль - коррет?

Должен ли я отключить модуль prefork? Я не вижу, как я могу отлаживать / помогать ошибке памяти внутри самого программного обеспечения.

Какие последствия имеет это, когда я отключу этот модуль?

Информация о версии

Linux version 3.10.0-123.13.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) )

Server version: Apache/2.4.6 (CentOS)
Server built:   Jan 12 2015 13:22:31
Server's Module Magic Number: 20120211:23
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

Ответы на комментарии

хрон

Здесь нет /etc/cron.d/dailyjobs, но только 0hourly скрипт, который выполняет почасовые скрипты 0anacron, 0yum-hourly.cron а также dellrda.cron - Ни один из них, похоже, ничего не делает, связанный с apache (IMHO)

/etc/logrotate.d/httpd

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

Ручная перезагрузка

/bin/systemctl reload httpd.service

Приводит следующий результат:

Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

И в error_log отображаются те же сообщения, что и выше.

Быстрый systemctl status httpd.service показывает:

httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: failed (Result: signal) since Fri 2015-04-17 12:26:36 CEST; 8s ago
  Process: 8828 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 8826 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
  Process: 8767 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=killed, signal=ABRT)
 Main PID: 8767 (code=killed, signal=ABRT)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"

apachectl -M

Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_anon_module (shared)
 authn_core_module (shared)
 authn_dbd_module (shared)
 authn_dbm_module (shared)
 authn_file_module (shared)
 authn_socache_module (shared)
 authz_core_module (shared)
 authz_dbd_module (shared)
 authz_dbm_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_owner_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)
 data_module (shared)
 dbd_module (shared)
 deflate_module (shared)
 dir_module (shared)
 dumpio_module (shared)
 echo_module (shared)
 env_module (shared)
 expires_module (shared)
 ext_filter_module (shared)
 filter_module (shared)
 headers_module (shared)
 include_module (shared)
 info_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 remoteip_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 slotmem_shm_module (shared)
 socache_dbm_module (shared)
 socache_memcache_module (shared)
 socache_shmcb_module (shared)
 status_module (shared)
 substitute_module (shared)
 suexec_module (shared)
 unique_id_module (shared)
 unixd_module (shared)
 userdir_module (shared)
 version_module (shared)
 vhost_alias_module (shared)
 dav_module (shared)
 dav_fs_module (shared)
 dav_lock_module (shared)
 lua_module (shared)
 mpm_prefork_module (shared)
 proxy_module (shared)
 lbmethod_bybusyness_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_heartbeat_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)
 systemd_module (shared)
 cgi_module (shared)
 php5_module (shared)

5
2018-04-17 09:43


Источник


Изящный перезапуск в середине ночи, вероятно, вызван запуском logrotate в это время. Когда выполняется logrotate и что в скрипте logrotate вашего apache? Пожалуйста, разместите содержание /etc/cron.d/dailyjobs а также /etc/logrotate.d/httpd - etagenklo
@etagenklo Done - я думаю, что /bin/systemctl reload httpd является ли виновником перезапуск apache, не так ли? - Florian Peschka
Что произойдет, если вы выполните перезагрузку вручную (то есть выполните команду /bin/systemctl reload httpd.service ? - etagenklo
@etagenklo error_log показывает те же самые сообщения, что и выше, и systemctl говорит мне, что Задание для httpd.service не выполнено, - Florian Peschka
Вы напомнили, что это «в основном ночью», предполагая, что это происходит в другое время. Если это не происходит в действительно непротиворечивое время (указывая на задание cron), вы можете захотеть использовать память монитора и место на диске в / tmp и / ... Я видел подобные проблемы до того, как у системы CentOS закончилась нехватка памяти, и я не могу вспомнить, перезапустил ли он или просто закрыл все. - Joe H.


Ответы:


Я предполагал, что вы попали в эту ошибку: http://bugs.centos.org/view.php?id=7669 , но я не вижу mod_gnutls в ваших загруженных модулях. Тем не менее, мне кажется, что вы попали в какую-то ошибку. Как я вижу, вы не используете последнюю версию httpd, поэтому сначала попробуйте обновить пакет httpd:

yum update

Пожалуйста, перезапустите httpd после этого, а затем попробуйте, если проблема перезагрузки сохраняется. Если он все еще там, я предлагаю открыть отчет об ошибке в CentOS для этого. Чтобы избежать крушения среди ночи тем временем, я предлагаю изменить скрипт logrotate для использования

/bin/systemctl restart httpd.service

вместо этого reload пока проблема не будет решена.

РЕДАКТИРОВАТЬ:

Прежде чем открывать отчет об ошибке в CentOS, вы должны убедиться, что используете только стандартные пакеты и модули CentOS от Apache. Если вы используете любые модули apache, которые сами компилируются или устанавливаются из сторонних репозиториев, они, вероятно, не согласятся с этим.

Чтобы показать все установленные пакеты с репо, из которых они получены, вы можете использовать команду

rpm -qa --qf '%{NAME} %{VENDOR}\n'

4
2018-04-17 11:00



Вау, какое исследование. Я рассмотрю эти ошибки и посмотрю, смогу ли я обновить, как только что-то там произойдет. Тем временем, спасибо за помощь. Я могу только возвысить один раз, к сожалению, вы заслуживаете гораздо большего :-) - Florian Peschka
Спасибо за поддержку, я отредактировал свой ответ с дополнительной мыслью ... - etagenklo