我有一台运行 Centos 的托管半专用服务器,以及一个使用 PHP 5.2.9 的 LAMP 设置。在过去的几个月里,我注意到 HTTP 请求花费的时间更长,许多网站的页面加载速度明显变慢。服务器上似乎没有任何重大负载,我已与系统管理员支持人员核实过,他们说没有任何明显的问题。然而,至少两个月以来,性能一直在明显下降 - 所以我真的需要尝试找出发生了什么,并希望有人能提出可能的原因。服务器的磁盘使用量约为 80%,所以也许这可能会对事情产生影响。
非常感谢任何帮助或指点!
编辑:我已启用 eAccelerator,启用 Apache KeepAlives,mysql 配置如下。我还应该指出,网页加载的大部分时间是连接到服务器,而不是下载页面内容。
[mysqld]
max_connections = 400
key_buffer = 16M
myisam_sort_buffer_size = 32M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 1024
thread_cache_size = 286
interactive_timeout = 25
wait_timeout = 1000
connect_timeout = 10
max_allowed_packet = 16M
max_connect_errors = 10
query_cache_limit = 1M
query_cache_size = 16M
query_cache_type = 1
tmp_table_size = 16M
#skip-innodb
[mysqld_safe]
open_files_limit = 8192
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer = 32M
sort_buffer = 32M
read_buffer = 16M
write_buffer = 16M
答案1
您可以尝试以下几种方法来缩小性能问题的根源(假设它主要是一个问题):
- 创建一个小型 HTML 文件并测试远程访问。如果这里存在性能问题,则可能是服务器之间的网络链接或 Apache 配置存在问题。
- 创建一个执行一些基本操作(如输出数字 1-100)的小型 PHP 文件,看看问题是否出在 PHP 方面。
- 创建一个以简单查询访问数据库的测试文件来检查基本的数据库性能。
- 在 mysql 客户端的服务器上本地运行一些典型查询。如果它们在本地运行缓慢,那么远程运行也会很慢。如果您怀疑数据库性能存在问题,启用慢查询日志也是一个好主意。
- 如果您怀疑数据库大小的增加是问题所在,请尝试在数据库/表的多个副本(小型、中型和大型)上测试查询。如果您的查询或索引很差,那么您会看到查询时间随着记录数量的增加而迅速增加。
- 检查基本服务器状态,如内存(确保您没有定期点击交换)、硬盘错误(smartctl)、服务器负载、CPU 空闲时间、所有分区上的可用空间(如 /tmp)、占用 CPU/内存的其他进程(top)以及系统日志中的相关错误。
- 如果以上内容均未发现任何问题,您可以从已知性能不佳的页面/查询开始,然后向后删除内容,直到问题被隔离。
答案2
如果您在 php 应用程序中进行大量数据库查找,您可能会检查索引表并对数据库进行优化。还请考虑增加 mysql 配置中的 thread_concurrency、buffers 和 table_cache。
通过优化 apache 和 php,您可能能够获得一些速度提升。例如,确保您已在 Apache 中启用 KeepAlives,并考虑安装和激活 mod_gzip(如果适用)。对于 php,您可能需要查看 eaccelerator 模块。
答案3
可能是磁盘子系统。它要么与另一台主机共享,从而减慢了系统速度,要么更糟的是,它是某种大型的网络磁盘子系统。在这两种情况下,磁盘的响应时间都会受到严重影响。
在生产环境中使用真正的专用硬件是一个好主意。
如果您想测试这一点,请将文档和 mysql 数据库移动到 tmpfs 并查看会发生什么。这不是全部,因为系统仍然需要从根目录加载内容,但这只是一个开始。