【问题标题】:Php doesn't kill processphp不会杀死进程
【发布时间】:2019-01-16 12:55:26
【问题描述】:

我正在配置一个新服务器以在最新版本中运行 wordpress。运行一段时间后,所有请求都开始返回 504 超时。我检查了来自 nginx 和 php 的所有日志,没有错误。运行后服务 php7.2 状态

我发现了这种情况:

有些东西阻止了我的 php 进程,而 php 并没有杀死该进程。当所有进程都忙时,我的服务器停止。

我用这些程序配置了我的 Droplet:

  • Ubuntu 18.04
  • PHP 7.2.10
  • Mysql 5.7.24
  • Nginx 1.14.0

我的 www.conf 配置了这些参数(如果我增加 max children,服务器延迟更多停止)

pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 10

我尝试使用默认配置运行此应用程序,ubuntu 16 和 php 7.0,但在所有液滴中都出现了相同的错误。只有这个 wordpress 实例有错误。

我在这里发布了所有配置,但我不知道错误是否可能出在其他东西上,比如在应用程序上。我将它从其他服务器(ubuntu 14.04,php 5.6)中移出,将所有文件复制到这个新的 droplet。也许是一些插件或类似的东西,因为只有这个实例有错误(我将另外 6 个 wordpress 移动到其他具有相同配置的 droplets 并且没有发现错误)。

编辑 1 -> 使用 strace 调试 nginx

我正在使用 strace 调试我的进程(德文郡建议)。结果是:

几乎所有结果:

1021  epoll_wait(10,  <unfinished ...>
1023  <... epoll_wait resumed> 0x55e8211180a0, 512, -1) = -1 EINTR (Interrupted system call)
1023  --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
1023  rt_sigreturn({mask=[]})           = -1 EINTR (Interrupted system call)

有时会显示:

1023  epoll_wait(14,  <unfinished ...>
1024  <... epoll_wait resumed> 0x55e8211180a0, 512, -1) = -1 EINTR (Interrupted system call)
1024  --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
1024  rt_sigreturn({mask=[]})           = -1 EINTR (Interrupted system call)
1024  gettid()                          = 1024
1024  write(4, "2019/01/16 23:18:18 [error] 1024"..., 360) = 360
1024  close(183)                        = 0
1024  write(182, "\27\3\3\2\365\256\3029\302\327\213\322a\375F\251\335\275\353\377\265\376\202R\314j!\200\317\203k "..., 762) = 762

【问题讨论】:

  • 您是否禁用了所有插件以查看问题是否仍然存在?如果没有,请一一启用它们并查看是否存在导致问题的特定问题。
  • 您是否在数据库中检查了所有路径都反映了正确的“新”路径(当然,如果数据库中有任何路径)?
  • 连接一个 strace 到一个 PHP 进程,看看它在做什么。
  • @Benoti 是的,我使用了 2 个插件并检查了 mysql 转储,一切似乎都很好
  • @MagnusEriksson 我开始这样做了,但是有超过 40 个插件。我不确定问题出在哪里,如果我禁用所有插件,wordpress 就会崩溃(错误不会立即停止,1 或 2 天停止)。我今天试试

标签: php wordpress nginx fpm


【解决方案1】:

我要感谢每一位帮助我的人。问题出在一些插件上。

我修复了它为 wordpress 实例创建完全相同的目录(在我使用新目录之前)并删除了两个插件(我关闭并打开了几乎所有插件,但只删除了两个)。

这些技巧很有用,我用它来解决一些 php config 的问题。

【讨论】: