![查找调用进程的文件/脚本](https://linux22.com/image/606338/%E6%9F%A5%E6%89%BE%E8%B0%83%E7%94%A8%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%96%87%E4%BB%B6%2F%E8%84%9A%E6%9C%AC.png)
我确实有一个 CPU 利用率很高的 PhP 进程。该进程反过来似乎调用了 mysql,并且两个进程一起使用了所有 CPU 核心和 RAM
使用 ps aux | grep php ,我可以获得文件名和位置。即;
/usr/bin/php /path/to/index/file/index.php
我无法删除 index.php,因为运行网站需要此文件。
我尝试将 index.php 更改为 home.php,并对 website/htaccess 进行了相应的更改。
此后我得到
/usr/bin/php home.php 用于 ps aux | grep php
似乎已经编写了一些脚本来访问网站的索引文件,但我无法找到它是哪个脚本。
我使用 sudo find . | xargs grep '/usr/bin/php' 搜索了整个机器,但还没有运气。
所以我的问题是如何找到正在执行'/usr/bin/php index.php'的脚本(如果是这种情况)
我非常感激对此的任何意见。
答案1
如果文件是 index.php,并且是网站不可或缺的一部分,那么有理由认为,如果有脚本访问它,那么它既可能是服务器外部的,也可能是内部的。为什么不查看一下您的访问日志呢,因为发送到服务器的任何请求都应该被记录下来,包括 IP,理论上应该有一些关于进行访问的程序类型的信息(尽管这很容易被欺骗)。
答案2
通常,性能问题太复杂,无法在这里解决。然而,您的设置中有一个明显的 WTF:
ps aux | grep php,我可以获得文件名和位置。即; /usr/bin/php /path/to/index/file/index.php
你是真的运行 CGI PHP?
sudo 查找 . | xargs grep'/usr/bin/php'
我强烈建议您向了解 Unix 系统和特别是 Web 服务器如何工作的人寻求帮助。
答案3
感谢 NickW 和 symcbean 。你们的回复很有用。
以下是问题概述。该网站使用 Yii 框架实现,因此每个请求都会经过网站的 index.php。
该网站有许多页面(100k 中有 1000 个)的 SQL 查询速度非常慢且错误。每当搜索机器人访问服务器并请求此类页面时,它都会执行 30 秒(php 默认超时),然后导致出现错误页面。机器人将再次访问同一页面或其他此类页面。
这就是 PhP 和 Mysql 进程 CPU 利用率高的原因。