半专用的Linux服务器 – 试图找出缓慢的performance的原因

我有一个托pipe半专用服务器运行Centos和LAMP设置与PHP 5.2.9。 我注意到在过去的几个月中,HTTP请求需要花费更长的时间,并且很多站点的页面加载速度都显着下降。 在服务器上似乎没有任何重要的负载,我已经用系统pipe理员支持来检查这个问题,他们说没有任何明显的问题。 然而,现在至less有两个月的performance一直在恶化 – 所以我真的需要尝试弄清楚发生了什么,希望有人能够提出可能的原因。 服务器占磁盘使用量的80%左右,所以这可能会影响事情。

任何帮助或指针非常感谢!

编辑:我有eAccelerator启用,Apache KeepAlives启用,MySQLconfiguration如下。 我还应该指出,网页的大部分加载时间是连接到服务器,而不是下载页面内容。

[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 

为了缩小性能问题的根源,你可以尝试做一些事情(假设它主要是一件事情):

  • 创build一个小的HTML文件,并testing远程访问它。 如果出现性能问题,则可能是服务器之间的networking链接或Apacheconfiguration中的某处。
  • 创build一个小的PHP文件,做一些基本的事情(如输出数字1-100),看看问题是否可能在PHP端。
  • 创build一个访问数据库的testing文件,在一个简单/简单的查询中检查基本的数据库性能。
  • 在mysql客户端的服务器上本地运行一些典型的查询。 如果他们本地运行缓慢,他们也将远程缓慢。 如果您怀疑数据库性能问题,启用慢查询日志也是一个好主意。
  • 如果您怀疑数据库大小的增加成为问题,请尝试在数据库/表(小型,中型和大型)的多个副本上进行查询。 如果您的查询或索引不佳,随着logging数量的增长,查询时间会迅速增加。
  • 检查基本的服务器状态,如内存(确保你没有定期进行交换),硬盘错误(smartctl),服务器负载,CPU空闲时间,所有分区上的可用空间(如/ tmp),其他进程占用CPU /内存(顶部),系统logging相关的错误。
  • 如果以上都没有显示任何东西,你可以从一个页面/查询开始,你知道performance不佳,并回退工作,直到问题被隔离。

如果您在php应用程序中进行了大量数据库查找,则可以查看索引表以及在数据库上运行优化。 还要考虑在mysql的configuration中增加thread_concurrency,buffers和table_cache。

你可能会站在通过优化Apache和PHP来获得一些速度的提高。 例如,确保在Apache中启用了KeepAlive,并考虑安装并激活mod_gzip(如果适用)。 对于PHP你可能想看看eaccelerator模块。

它可以提供磁盘子系统。 它要么与另一台主机共享,这会降低系统性能,或者更糟糕的是,这是一种大型的networking磁盘子系统。 在这两种情况下,磁盘的响应时间都受到严重影响。

在生产环境中使用真正的专用硬件是个好主意。

如果你想testing这个,将文档和mysql数据库移动到tmpfs,看看会发生什么。 这不是一切,因为系统仍然需要从根加载东西,但这是一个开始。