我有一个512MB的RAM和一些运行在其上的php / mysql网站(〜20)的小型Ubuntu服务器。它已经运行了两年,现在没有一个单一的问题。 但是我觉得有些优化的时刻刚刚来临。
在这个服务器上托pipe的网站stream量非常低,但是现在我看到一些CPU问题,他们开始获得更多的访问。
我试图做的第一件事是确定问题,所以我一直在玩几个命令行工具,如顶级htop apachetop等,和工作台监视MySQl.With这些工具是很难知道我是什么正在进行。 例如,我创build了一个在后台运行的PHP守护进程,并且每10秒钟在数据库中存储CPU使用率。如果CPU大于60%,则存储apachetop的输出。 这并不是特别有用,因为许多logging是OPTIONS * HTTP / 1.0 。 此外,它看起来像是最后一个请求的列表,而不是当前的请求。
秒,当我试图监视使用htop发生了什么,我总是看到〜15条logging,如:
6905 mysql 20 0 462M 110M 5220 S 0.0 21.6 5:29.79 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
另一个〜15像:
23382 www-data 20 0 259M 27384 4820 S 1.3 5.2 0:01.00 /usr/sbin/apache2 -k start
这是一个截图:
我不确定这些stream程是否应该一直开放,或者我可以优化。 我现在可以升级这个服务器,我只是想在做之前尽可能地优化它。
另外,我打开日志查询缓慢,唯一的查询有所有查询,当服务器的CPU超过90%执行。 这只是确认,我使用的(自定义)php / mysql不是很重。 我可以说,拥有更多stream量的网站每天有300位唯一身份访问者和1200个网页浏览量。 所有其他网站的stream量较低。
1)我正在寻找如何有效地监控这个服务器的build议。
2)我需要MySQl和PHP的build议。 例如,我应该为它们分配多less内存,或者应该打开/closures哪个选项。
谢谢!
这里有一个链接到htop的截图: http ://www.flickr.com/photos/58586868@N02/5375745794/
从我之前的一些post中可以猜到,我到处运行collectl。 从sourcefore和'/etc/init.d/collectl start'下载/安装rpm,就完成了。 它将每10秒钟收集几百个性能指标,CPU的<0.1%。 它也会每分钟logging一次过程数据的快照,因为这是一个较重的操作。 然后,您可以以各种格式回放收集的数据,甚至可以使用名为colplot的基于Web的工具(它是collectl-utils包的一部分)进行绘制。
看看系统正在做什么的简短和/或不完整的图片是不会让你在那里。 您需要一个长期的细粒度数据图片,您可以深入了解真正发生的情况。
-标记
如何调整Linux服务器,运行Apache,PHP和MySQL至less可以满足4本大书 – 而且没有任何神奇的解决scheme。
然而,根据我的经验,LAMP堆栈上的大多数性能问题都是写得不好的数据库查询。 你已经抛弃了这个作为你认为是一个性能问题的可能的贡献 – 我build议你回去看看这个。
一旦你完成了数据库,其他要检查的是你正在压缩所有的html,javascript和css(mod_gzip)和PHP生成的HTML(输出缓冲)。 确保你有一个运行代码caching运行(如APC)。 确保你用合理的caching信息来提供所有的静态内容。
系统度量标准可以很好地告诉你系统的性能是如何受到限制的,而不是实际的性能。 开始在你的apache日志中logging%D,并分析结果, 找出你的系统真正的performance 。 优先考虑优化总数最高的url。
从系统提供的详细信息是非常相关的 – 假设你的web服务器安装正确,他们build议CPU的使用大部分都是由mysql来完成的 – 但是如果web服务器的configuration是错误的,则可能是相反的情况。
如果你提供了apacheconfiguration(不包括评论),这将是有帮助的。
我打开日志进行缓慢的查询,唯一的查询有所有查询,当服务器的CPU超过90%
听起来你设置的门槛太高。 尝试将阈值设置为0,然后编写一个parsing器,从查询中除去参数,以确定哪些参数确实很慢。 或者只是find一个已经写好的 。
显然,你的表随着时间的推移而增长,而你正在失去mysql缓冲区。 试着找出你的表是MyISAM还是InnoDBtypes,并相应地调整缓冲区设置。
如果你不使用InnoDB将其closures。 InnoDB使用innodb_buffer_pool_size设置缓冲区,MyISAM使用key_buffer。 你可以在mysqladminvariables中find这两个值。
随着表的增长,以前快速工作的查询也越来越慢。
关于了解电脑的function? 这个很难。 尝试find系统忙的确切时间,并查看系统和用户crontabs和web服务器访问日志。
你需要更多的信息。 服务器总是运行缓慢吗? 或者只在某些时间段? 什么时间段? 在这段时间内,这个盒子看起来像什么?
我会看看像穆宁 。 这是一个非常简单的系统监控应用程序,收集数据并以graphicsforms呈现。 他们有Apache和MySQL的插件来跟踪访问,进程和音量。
关于慕宁的最好的事情是,你几乎没有工作获得大量的信息。 安装和设置是一个5分钟的工作,如果你手动做,而如果你使用的是Debian / Ubuntu,那么30秒的工作。 你必须做的唯一事情就是把主机添加到configuration中,并确保你想要的插件被启用。
Munin或类似的东西,将帮助你为你的系统看起来像什么目前的基线。 当你开始对应用程序进行修改,调整和调整时,这将会非常有用,因为对于哪些工作有更好的反馈。 然后,您可以开始深入了解更具体的位置,并提高MySQL性能,Apache性能以及其他任何正在运行的内容。