PHP 脚本随机地变得响应很慢 - 数据库锁定?

PHP 脚本随机地变得响应很慢 - 数据库锁定?

我不确定是否应该在这里或 stackoverflow 上发布此内容,因此如果它发错了地方,请谅解。

我在 centOS VPS 上运行了大约 7 个 php 脚本。每个脚本都会联系游戏服务器并处理日志,然后使用日志执行一些数据库查询或将信息发送回游戏服务器。

我遇到一个问题,有些脚本会随机变得响应非常慢,我不知道从哪里开始调试。每个脚本都连接到自己的数据库模式,但位于同一个 MySQL 服务器上。每个脚本每秒将执行大约 4 次插入,并在各自的数据库上执行两倍的选择语句。我认为数据库锁定可能会导致此问题,但从数据库读取的一些控制台消息每 30 秒都会毫无问题地发送到游戏服务器控制台,即使脚本对其他命令的响应很慢。

所有脚本均未占用大量内存或 CPU 能力。每个脚本大约占用 0.1%。

我知道这些信息确实很模糊,但是我对 Linux 不太了解(事实上,top 是我的极限),我真的不知道从哪里开始调试它。

谢谢。

答案1

您可以尝试以下几件事:

  • 检查系统和应用程序日志中是否有相关消息。有时会记录问题/超时。这包括 DerfK 提到的 MySQL 慢查询日志。
  • 服务器上最好有某种监控系统。这样可以明确告诉您是否存在任何明显的瓶颈(CPU、内存、IO 等)。或者,如果问题发生在特定时间,您可以使用各种命令行工具 top、vmstat、iostat 等来检查系统状态。请确保首先排除明显/常见的原因(高 CPU、低 RAM、交换使用率、IO 锁定/问题/高负载)。
  • 如果您可以对脚本进行基准测试/压力测试,则可能有助于确定问题的根源。能够可靠地复制问题是解决问题的重要一步。
  • 考虑在脚本中添加一些基本日志记录。我会先对脚本运行时间进行基本检查,只有当运行时间超过 X 秒时才会输出一些内容。
  • 您提到脚本解析日志。如果可能,请尝试多次在同一组日志上运行脚本,看看问题是发生在同一个地方还是随机发生在不同的地方。您还可以尝试禁用写入,看看问题是由读取/解析还是写入(或两者)引起的。
  • 如果您发现某些查询运行缓慢,请尝试通过命令行客户端在数据库上手动运行/测试它们。这将告诉您查询本身是否运行缓慢,或者只是由于某种原因从 PHP 远程执行查询。

相关内容