PHP 和 IIS 最佳实践

PHP 和 IIS 最佳实践

我正在运行 IIS 和 PHP,在负载测试中遇到了一些瓶颈。页面已缓存,但有时用户的加载时间长达 30 秒。这似乎是在缓存过期时发生的。我们正在研究很多不同的方法来解决这个问题,所以我们首先要考虑的是 IIS 和 PHP。通常我在 Apache 下运行 PHP,并没有遇到这些问题。有人有在 IIS 下运行 PHP 的一些好建议/最佳实践吗?我们已经启用了 FastCGI。

答案1

PHP 在 IIS 上运行良好。它并不完美,可能也不是“最佳”的,但两者的结合不会必然导致 30 秒的加载时间。

如果确实是页面生成方面的问题,那么最好的办法是在整个 PHP 代码中插入一个计时器,以确定哪一行导致了巨大的延迟。如果是加载嵌入元素的问题,那么使用 Firebug 或 Google Code 分析工具进行分析可能会有所帮助:http://code.google.com/speed/tools.html

答案2

另外,有一件事要记住,您说应用程序的“幕后”有很多事情要做。我假设有一个数据库后端。话虽如此,如果是 MySQL,我有这个我过去使用过的文本来帮助诊断可能是问题一部分的缓慢的 MySQL 查询。我假设 MSSQL 等也有类似的选项。

要启用 mysql 的慢查询日志记录,请在 /etc/my.cnf 中输入以下行并重新启动 mysql

启用慢查询日志这是一个检查哪些查询耗时过长的好工具log-slow-queries=/tmp/slow_queries.log log-update = /var/lib/mysql/updates.log

MySQL 具有内置功能,允许您将 SQL 查询记录到文件中,您可以启用将完整的 SQL 查询记录到文件中或仅将运行缓慢的查询记录到文件中。如果启用 SQL 查询日志,我们可以轻松地排除故障/调试 SQL 语句,慢查询日志用于查找执行时间较长的查询,因此是优化的候选。

要启用此功能,您只需在 my.cnf 文件中添加几行,然后重新启动。添加以下内容:

仅启用慢速查询日志 log-slow-queries = /var/log/mysql/mysql-slow.log long_query_time = 1

启用慢查询后,mysqld 会将一条语句写入慢查询日志文件,该语句包含所有执行时间超过 long_query_time 秒的 SQL 语句。获取初始表锁的时间不计入执行时间。mysqld 仅在 SQL 语句执行完毕并释放所有锁后才进行记录,因此日志顺序可能与执行顺序不同。long_query_time 的最小值和默认值分别为 1 和 10。

启用完整日志查询 log=/var/log/mysqldquery.log

相关内容