我正在运行一个高流量网站的专用-虚拟16 by内存CentOS服务器托管媒体坦普尔。
服务器经常因为CPU使用率高而死亡(%1500)
当我使用"top“命令检查正在运行的进程时,我看到过多的httpd进程正在运行,我认为这是导致CPU使用率过高的原因。
我尝试调优mysql,调优apache,my.cnf,httpd.cnf,删除了我不使用但不能解决问题的Apache模块。
请让我知道在我的服务器配置中您需要知道哪些值,以帮助我诊断问题。
提前谢谢。
发布于 2011-10-23 07:43:41
当您经历高系统负载时,tail -f /var/log/messages会怎么说?
您的进程是非常I/O还是非常CPU密集?
一项意见是:
看起来你有18G的物理内存,但是零交换空间.例如你的top命令显示“交换: 0k总计”.这意味着您没有配置任何交换空间。
一般来说,您应该在UNIX系统上始终有足够的交换空间!交换大小=1.2倍内存大小是个好主意。使用快速分区是个好主意。如果您的UNIX系统耗尽了RAM并且没有交换,那么就会发生非常糟糕的事情。过程只是莫名其妙地死去。这是一件非常糟糕的事情!尤其是在生产中。磁盘很便宜!添加一个慷慨的交换分区!:-)或者最坏的情况,您也可以在以后创建一个交换文件。
在任何UNIX系统上,您都需要交换空间--因为这是进程存在的地方,而进程不在其中一个CPU上调度。如果你没有交换空间,就会发生非常糟糕的事情,因为你的系统会耗尽用来创建新进程的地方(RAM) --它不能把它们放在交换中,因为没有,所以你会看到非常高的负载,系统冻结,进程似乎莫名其妙地死去。
要检查内存和正在使用的交换空间,可以运行free -k。还可以通过运行swapon -s来检查交换配置。如果没有配置交换,这将不会显示任何输出。
根据经验,配置交换空间大约是物理内存的1.2倍。我会说,如果你有18G内存,配置~20.30g交换--不要吝啬交换,因为“磁盘太便宜了”!
免责声明:当您可以在没有交换的情况下生存时,会有一些例外,但是另一方面,配置和不需要它并不有害!)
创建交换空间的两个选择:
...then格式,用于交换分区或交换文件,使其可用于与mkswap命令进行交换。
使用sudo swapon -a启用交换空间之后,您应该可以在top和swapon -s中看到它,并且您的系统应该表现得更好。
关于交换空间的
https://www.linux.com/news/software/applications/8208-all-about-linux-swap-space
https://www.linux.com/learn/tutorials/442430-increase-your-available-swap-space-with-a-swap-file
http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/
http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/
http://lissot.net/partition/partition-08.html
http://tldp.org/LDP/sag/html/swap-space.html
man -k swap
man mkswap
man fstab,vim /etc/fstab
当这个问题被迁移到ServerFault时。我将在这里添加一个评论,因为ppl抱怨我引用了一条老规则:“1.2倍内存大小的==交换大小”
一辆2TB的SATA驱动器现在的价格约为70美元,这意味着20‘s的成本约为70美分--这太便宜了!我知道20 as的声音听起来很多,但把它想象成一种非常便宜的“最坏情况保险”!
有人说:“如果你的系统填满了18 if,换到了20 if,那么你就有了更大的问题。”
当然是这样,但是如果意外的事情出了问题,有了慷慨的交换空间,你的服务器和它上的进程就不会完全崩溃!您可能仍然能够登录,在系统仍在运行时检查它(缓慢),并修复一些东西(尽管速度缓慢),而不必重新启动。在生产服务器上,没有理由不使用慷慨的交换。
如果我有一个具有18 is内存的服务器,并且它运行的是MongoDB (这是非常占用内存的)。我当然会配置非常慷慨的交换空间,甚至40.60 40.万一出了什么意外..。
发布于 2011-10-24 08:28:37
20 of 30 of的交换空间非常高。如果要在Linux中交换20 in,则有更大的问题。
发布于 2011-10-24 13:43:35
几乎可以肯定的是,您的机器正在耗尽内存,因为您有太多的“胖”Apache进程很少或根本不工作。
Apache通常使用“预叉”模型。PHP通常在进程中运行.这可能会有问题,因为:
一个“坏”的解决方案是关闭维持生命(或者可能减少保持活着的时间)。注意,keepalives对性能非常好,特别是在HTTPS上。
一个“更好”的解决方案将是切换到一个更好的架构。一个更好的架构应该是你不会浪费“胖”进程什么都不做。一个更好架构的典型实现是Nginx + PHP/FastCGI。
我不一定提倡使用Nginx --如果您运行不同的MPM (多处理模块,例如工人、事件,而不是前置叉),并使用FastCGI将PHP移出进程,那么您也可以使用Apache来实现它。
https://serverfault.com/questions/324103
复制相似问题