LINUX.ORG.RU

systemd 207 и php-fpm

 ,


0

1

systemd 207 стал подвисать при выключении компьютера во время завершения php-fpm.
Выключение компьютера длится минут пять и больше, а не около 20 секунд как раньше.

Как побороть зависания вроде бы нашел - для этого подправил в файле /usr/lib/systemd/system/php-fpm.service параметр Type.

Примерно вот так:

[Service]
Type=notify

на

[Service]
Type=simple

И всё вроде бы стало нормально, но вчера обновился php-fpm с 5.5.3 до 5.5.4 и Type=notify снова на месте. Что видимо правильно.

Каждый раз править Type не выход.
Значит я что-то делаю не так?
Ну и в чем тогда может быть причина подвисания при выключении?

$ uname -a
Linux myhost 3.11.1-1-ARCH #1 SMP PREEMPT Sat Sep 14 19:30:21 CEST 2013 x86_64 GNU/Linux

Каждый раз править Type не выход.
Значит я что-то делаю не так?

1) Напиши багрепорт

2) Никогда не правь пакетные системные файлы в /usr.

Чтобы подправить systemd-юнит надо скопировать его в /etc/... и исправить там. Файлы из /etc имеют больший приоритет чем одноименные файлы в /usr

alpha ★★★★★
()
Ответ на: комментарий от alpha

1) Напиши багрепорт

Ну я с начала сюда.

systemd-юнит надо скопировать его в /etc/... и исправить там

Все нужные systemd-юниты лежат симлинками в /etc/systemd/... Поскольку их systemctl создает/удаляет, то я бы не стал в эту кухню лезть.

Но. Длинная пауза при выключении компьютера не выглядит нормальной. Вот и пришлось разбираться.

Вопрос - баг это или нет?

user0xff
() автор топика
Ответ на: комментарий от user0xff

Поскольку их systemctl создает/удаляет, то я бы не стал в эту кухню лезть

Ну раз уж всё равно залез, то доку не мешает посмотреть.

https://wiki.archlinux.org/index.php/Systemd#Editing_provided_unit_files

Вопрос - баг это или нет?

Багрепорт надо написать в том числе и затем, чтобы выяснить, есть ли там ошибка. Если ты его оформишь пусть и с недостатком информации, тебе там дальше подскажут какие данные ещё собрать.

Как минимум логи процесса выключения нужны.

alpha ★★★★★
()
Ответ на: комментарий от user0xff

При простом

systemctl start php-fpm
systemctl stop php-fpm
никаких заметных зависаний не вижу. (только это на ф19)

Судя по этому:

Behavior of notify is similar to simple, however it is expected that the daemon sends a notification message via sd_notify(3) or an equivalent call when it finished starting up. systemd will proceed starting follow-up units after this notification message has been sent.

и вот этому:

http://permalink.gmane.org/gmane.comp.php.devel/80337

systemd ждет от твоего сервиса ответа, но не получает.

Ты journalctl -u php-fpm смотрел?

alpha ★★★★★
()
Ответ на: комментарий от alpha

journalctl ничего вразумительного не пишет.

[root@myhost ~]# journalctl -u php-fpm
...
-- Reboot --
вер 24 12:03:45 myhost systemd[1]: Starting The PHP FastCGI Process Manager...
вер 24 12:03:45 myhost systemd[1]: Started The PHP FastCGI Process Manager.
вер 24 12:04:09 myhost systemd[1]: Stopping The PHP FastCGI Process Manager...
вер 24 12:04:10 myhost systemd[1]: Stopped The PHP FastCGI Process Manager.
-- Reboot --
вер 24 12:04:24 myhost systemd[1]: Starting The PHP FastCGI Process Manager...
вер 24 12:04:24 myhost systemd[1]: Started The PHP FastCGI Process Manager.
вер 24 12:25:30 myhost systemd[1]: Stopping The PHP FastCGI Process Manager...
вер 24 12:25:30 myhost systemd[1]: Stopped The PHP FastCGI Process Manager.

Тут предпоследняя перезагрузка с Type=notify, последняя с Type=simple.

Чуть больше можно узнать если просмотреть лог завершения так как написано вот тут: http://freedesktop.org/wiki/Software/systemd/Debugging/#index2h1

Тогда при Type=notify есть timed out

# cat /var/log/shutdown.log | grep php-fpm
[    3.120149] systemd[1]: Installed new job php-fpm.service/start as 66
[    6.545146] systemd[1]: About to execute: /usr/bin/php-fpm --nodaemonize --pid /run/php-fpm/php-fpm.pid
[    6.545797] systemd[1]: Forked /usr/bin/php-fpm as 522
[    6.546076] systemd[1]: php-fpm.service changed dead -> start
[    6.560786] systemd[522]: Executing: /usr/bin/php-fpm --nodaemonize --pid /run/php-fpm/php-fpm.pid
[    6.728378] systemd[1]: Got notification message for unit php-fpm.service
[    6.728399] systemd[1]: php-fpm.service: Got message
[    6.728411] systemd[1]: php-fpm.service: got MAINPID=522
[    6.728523] systemd[1]: php-fpm.service: got READY=1
[    6.728618] systemd[1]: php-fpm.service changed start -> running
[    6.728631] systemd[1]: Job php-fpm.service/start finished, result=done
[    6.728946] systemd[1]: php-fpm.service: got STATUS=Ready to handle connections
[   10.750352] systemd[1]: Installed new job php-fpm.service/stop as 376
[   10.760807] systemd[1]: php-fpm.service changed running -> stop-sigterm
[   10.791670] systemd[1]: Got SIGCHLD for process 522 (php-fpm)
[   10.803819] systemd[1]: php-fpm.service: cgroup is empty
[  100.768953] systemd[1]: php-fpm.service stopping timed out. Killing.
[  100.769082] systemd[1]: php-fpm.service changed stop-sigterm -> stop-sigkill
[  190.777255] systemd[1]: php-fpm.service still around after SIGKILL. Ignoring.
[  190.777278] systemd[1]: php-fpm.service changed stop-sigkill -> failed
[  190.777363] systemd[1]: Job php-fpm.service/stop finished, result=done
[  190.779854] systemd[1]: Unit php-fpm.service entered failed state.

При Type=simple

# cat /var/log/shutdown.log | grep php-fpm
[    3.087429] systemd[1]: Installed new job php-fpm.service/start as 66
[    6.455628] systemd[1]: About to execute: /usr/bin/php-fpm --nodaemonize --pid /run/php-fpm/php-fpm.pid
[    6.456146] systemd[1]: Forked /usr/bin/php-fpm as 522
[    6.458892] systemd[522]: Executing: /usr/bin/php-fpm --nodaemonize --pid /run/php-fpm/php-fpm.pid
[    6.459332] systemd[1]: php-fpm.service changed dead -> running
[    6.459357] systemd[1]: Job php-fpm.service/start finished, result=done
[   15.776395] systemd[1]: Installed new job php-fpm.service/stop as 376
[   15.784630] systemd[1]: php-fpm.service changed running -> stop-sigterm
[   15.821938] systemd[1]: Got SIGCHLD for process 522 (php-fpm)
[   15.822052] systemd[1]: Child 522 belongs to php-fpm.service
[   15.822104] systemd[1]: php-fpm.service: main process exited, code=exited, status=0/SUCCESS
[   15.822125] systemd[1]: php-fpm.service changed stop-sigterm -> dead
[   15.822230] systemd[1]: Job php-fpm.service/stop finished, result=done
[   15.833946] systemd[1]: php-fpm.service: cgroup is empty

Ну и если явно, то с Type=notify

[root@myhost /]# time systemctl start php-fpm

real    0m0.042s
user    0m0.000s
sys     0m0.003s
[root@myhost /]# time systemctl stop php-fpm

real    3m0.010s
user    0m0.007s
sys     0m0.000s

С Type=simple

[root@myhost /]# time systemctl start php-fpm

real    0m0.011s
user    0m0.003s
sys     0m0.000s
[root@myhost /]# time systemctl stop php-fpm

real    0m0.034s
user    0m0.003s
sys     0m0.003s

А что пишет в федоре init --version? Версия 207?

# init --version
systemd 207
+PAM -LIBWRAP -AUDIT -SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ
user0xff
() автор топика
Ответ на: комментарий от alpha

А нет, не попробую. 207 для ф19 не собирают.

alpha ★★★★★
()

systemd обновился до версии 208. Проблема с «зависаниями» больше не наблюдается. Это наверное до следующего обновления systemd.

user0xff
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.