首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过多的httpd进程运行和CentOS服务器冻结

问过多的httpd进程运行和CentOS服务器冻结
EN

Server Fault用户
提问于 2011-10-23 07:29:26
回答 4查看 16.5K关注 0票数 5

我正在运行一个高流量网站的专用-虚拟16 by内存CentOS服务器托管媒体坦普尔。

服务器经常因为CPU使用率高而死亡(%1500)

当我使用"top“命令检查正在运行的进程时,我看到过多的httpd进程正在运行,我认为这是导致CPU使用率过高的原因。

我尝试调优mysql,调优apache,my.cnf,httpd.cnf,删除了我不使用但不能解决问题的Apache模块。

请让我知道在我的服务器配置中您需要知道哪些值,以帮助我诊断问题。

提前谢谢。

EN

回答 4

Server Fault用户

发布于 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.万一出了什么意外..。

票数 7
EN

Server Fault用户

发布于 2011-10-24 08:28:37

20 of 30 of的交换空间非常高。如果要在Linux中交换20 in,则有更大的问题。

票数 0
EN

Server Fault用户

发布于 2011-10-24 13:43:35

几乎可以肯定的是,您的机器正在耗尽内存,因为您有太多的“胖”Apache进程很少或根本不工作。

Apache通常使用“预叉”模型。PHP通常在进程中运行.这可能会有问题,因为:

  • PHP使apache子进程每个进程都使用大量内存。
  • 通过缓慢的连接提供静态文件,使子进程无缘无故地长期使用。
  • 如果打开,也会保持子进程的使用。

一个“坏”的解决方案是关闭维持生命(或者可能减少保持活着的时间)。注意,keepalives对性能非常好,特别是在HTTPS上。

一个“更好”的解决方案将是切换到一个更好的架构。一个更好的架构应该是你不会浪费“胖”进程什么都不做。一个更好架构的典型实现是Nginx + PHP/FastCGI。

我不一定提倡使用Nginx --如果您运行不同的MPM (多处理模块,例如工人、事件,而不是前置叉),并使用FastCGI将PHP移出进程,那么您也可以使用Apache来实现它。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/324103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档