重新启动Apache以提高速度

伙计们,我的服务器整天慢得不可思议,花了2分钟来装载一个页面,奇迹般地,当我重新启动apache时,它又恢复了。 有人知道为什么 我应该使用cron定期重启apache吗?

这完全取决于你的Apache运行的是什么。 它只是静态页面? 或者你有dynamic代码?

通常情况下,如果您在重启过程之后的一段时间内看到速度减慢,则表示存在内存泄漏。 Apache本身有一个主要的内存泄漏(它被非常广泛的使用,经过很好的testing..),这是非常不同的(虽然不是不可能),但它有可能是在底层应用程序中。

请注意观察系统上的进程,最好使用工具绘制内存和CPU消耗随时间变化的graphics,并找出罪魁祸首。

它将交换,并重新启动Apache只是让所有的工作进程从交换泥潭。 它会继续发生,除非你投入学习系统信息工具,如sysstat,它会跟踪你的所有进程和系统统计信息,所以你可以计算出消耗所有内存的东西。 一旦你知道什么是猪(像卡米尔,我敢打赌这是一个漏洞的应用程序内的Apache),您可以执行应用程序特定的诊断,以确定确切的原因,并杀死它。

由于一些应用程序运行(或运行)在Apache的顶部有问题,我每天反弹一次(与MySQL)。

这就是说,你真的不应该这样做 – 因为这是一个破碎的应用程序的迹象。 我知道许多Apache服务器运行几个星期的正常运行时间,只有当服务器的主要更新(即内核升级,新硬件等)被反弹时才会反弹。

您可以通过将MaxRequestsPerChild设置为非零值或低于当前值来减轻此问题。

顾名思义,它定义了Apachesubprocess在退出并启动新进程之前将处理的请求数。 将其设置为较低的值可以有助于定期地将stream程转换过来,然后才有机会吸取太多的内存。

不过,你仍然应该调查潜在的原因。

如果你明白Linux如何使用内存,这真的很有帮助。 Linux(默认情况下)喜欢在内存中caching频繁/最近访问的文件,它会高兴地发送像Apache,MySQL和其他进程脏的页面(交换),以便有足够的空间来维护这些文件缓冲区。

这可能,也可能不是你想要的,取决于你的服务器。 如果您正在运行典型的LAMP,那么您将有三个内存资源竞争连续的物理内存:

  1. 阿帕奇
  2. MySQL的
  3. PHP

其他东西(也许是ClamAV?)也很可能需要记忆。 简而言之,需要物理内存的应用程序无法获得它。

你应该做的是读取几个sysctl调整,调整Linux从内存页面caching回收应用程序的速度。 “swappiness”和“vfs_cache_pressure”是两个很好的开始。 我不能告诉你(具体)如何设置这些而不看你的系统。

你也可以看看你的apacheconfiguration,只要禁用保持活动的请求可能会阻止这么多闲置的孩子不必要地呆在内存中。 再次,这很难说,我不知道你主办什么样的网站。 另外,你使用默认的MySQLconfiguration吗? 你可能会发布另外一个问题来描述你的硬件,你提供的是什么types的网站以及你的慢速查询是什么样的,然后人们可以提出很好的优化。

所以,简而言之(并回答你的问题),不 – 这是一个非常糟糕的主意,让cron按设定的时间间隔重新启动apache。 解决根本问题要好得多。