就像程序员经常遇到的情况一样,我不得不为这家公司接管别人的代码,服务器在运行 ubuntu-saucy-13.10-amd64-server 的 Amazon Cloud(i2.xlarge)上运行。(那家伙离开了)
该服务器有 700GB SSD 和 30GB RAM,但我的问题是之前的开发人员不擅长编写 SQL 语句,而且我看到的 PHP 脚本有非常长且不必要的循环。
我考虑过查看 PostgreSQL 日志,但我仍然需要将查询与 php 页面匹配(漫长而痛苦的过程)。
有没有办法让我知道哪个 PHP 页面在资源占用方面对服务器造成“最大损害”,以便我可以首先开始替换最严重的页面?
非常感谢您的帮助,我已经在这个领域工作了一段时间了。
答案1
首先要说的是:
- 启用 MySQL 慢日志并检查它 - 这将为您提供最繁重的查询。尝试将它们与页面匹配
- 进行静态分析以发现一些明显的错误
- 实现一些页面性能的日志记录(例如微时间时间戳等)
- 从最常用的页面开始进行一般且中等速度的代码审查(网络服务器日志是查看频率的好地方)
- 在您的网络服务器中启用请求时间日志记录,以便您可以跟踪页面性能。
显然,使用调试器是一种很好的方法。
更重要的是,设置一份生产副本进行测试,这样您就可以试用它。如果在副本上没有发现这些问题,那么问题就出在数据库配置上——内存使用、索引、查询缓存等。
答案2
如果你正在运行 PHP-FPM,你可以启用慢速日志。设置request_slowlog_timeout
为您认为“慢”的秒数,并确保的值slowlog
指向您可以写入的地方。
如果您有(或可以安装)(XHProf)[http://pecl.php.net/package/xhprof]然后您就可以从中获得丰富的分析信息。它是一款非常轻量级的分析器,我在一个非常繁忙的网站上生产运行它,没有任何不良影响。
如果你没有运行 PHP-FPM,并且无法(或不想)安装 XHProf和如果您确信 DB 查询有问题,那么我的方法是从 PostgreSQL 慢速日志开始。如果您能找到最慢的查询,那么快速 grep 很可能会找到它们所属的页面。这不是最理想的,但总比没有好。