服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

如何阻止Apache崩溃我的整个服务器?

我用一些服务来维护一个Gentoo服务器,包括Apache。 这是相当低端的(2GB内存和2核心的低端CPU)。 我的问题是,尽pipe我尽了最大的努力,一个过载的Apache崩溃了整个服务器。 事实上,在这一点上,我已经确信Linux是一个可怕的操作系统,不值得任何人在负载下寻求稳定性。 我试过的东西: 为根进程调整oom_adj(以及它的所有subprocess)。 这几乎没有影响。 当Apache超负荷的时候,系统就会崩溃,因为系统在杀死任何东西之前都会调出所有的东西。 关掉交换。 没有帮助,它会卸载内存分页进程和其他文件的二进制文件/,从而导致相同的效果。 把它放在一个内存限制的cgroup(限于512MB的RAM,占总数的1/4)。 这个“工作”,至less在我自己的压力testing中 – 除了服务器在负载下一直崩溃(基本上拖延所有其他进程,通过SSH等无法访问) 以闲置的I / O优先级运行。 最后这不是一个好主意,因为它只是导致系统负载无限上升(成千上万),几乎没有可见的效果 – 直到您尝试访问磁盘的未缓冲部分。 这导致任务冻结。 (对于很好的I / O调度,呃?) 限制并发连接到Apache的数量。 由于大多数插槽被长时间请求(文件下载)占用,将该数字设置得太低会导致网站无响应。 我尝试了各种各样的Apache MPMs(prefork,event,itk)。 从prefork / event + php-cgi + suphp切换到itk + mod_php。 这改善了性能,但并没有解决实际问题。 切换I / O调度程序(cfq截止date)。 只是强调一下:我不在乎Apache本身是否在负载下,我只是希望我的系统的其余部分保持稳定。 当然,在短时间的密集负荷之后,阿帕奇能够很快恢复,这是一件非常棒的事情。 现在我大部分都不知道,在这个时代,人类怎么能devise一个操作系统,在这个看起来很简单的任务中(不允许一个系统组件崩溃整个系统)似乎几乎是不可能的 – 或者至less是非常的很难做到。 请不要build议像虚拟机或“购买更多内存”的东西。 在朋友的帮助下收集的更多信息:当cgroup oom杀手被调用时,进程挂起。 这是呼叫跟踪: [<ffffffff8104b94b>]? prepare_to_wait + 0x70 / […]