我有一台 Jenkins 服务器,它会定期重建 PHP/mySQL 应用程序。每次推送新的 PHP 代码时,此作业都会删除相应数据库中的所有表,然后使用 PHP 安装程序中指定的结构重新创建它们。这在大多数情况下运行良好,但偶尔会挂起。
我不确定 mysqld/php 进程是如何实例化/销毁的。我注意到我经常有 php 进程运行超过一个小时,而且我不断地至少有一个 mysqld 进程运行数小时/数天。看看我的top
输出:
每次请求页面时,您不是应该获得一个新进程吗?并且该进程不是应该在页面传送后销毁吗?我以为 PHP 就是这样工作的,但我不确定 mysqld 是否如此。php.ini 中确实有一行写着max_execution_time = 30
,所以我很困惑这个 php 进程怎么会运行一个多小时。
答案1
除非您将 Jenkins 作业配置为每次运行时启动和停止 mysqld,否则您不会看到它从进程列表中消失。mysqld 是一个始终在后台运行的守护进程,具体取决于它的配置和安装方式。标准软件包安装将使服务在启动时启动。
此外,mysqld 不会派生新进程。所有查询都将由该单个进程处理。
对于 PHP 进程,该top
命令不会以实际(时钟)时间显示 TIME。它报告的是 CPU 时间。您可以让一个进程运行几个小时,但它只使用了几分钟甚至几秒钟的 CPU 时间。此外,它以 m:ss.t(分钟:秒.十分之一秒)的形式报告 CPU 时间。