针对高并发请求优化Apache

我正在运行一个服务于移动应用程序的API请求的Apache2 Ubuntu服务器。

最近我面临的一个瓶颈是,当请求越来越高(更多的并发用户),请求响应越来越慢。 以前需要1或2秒,但是一旦并发用户增加(在某个高峰时间),即使服务器负载, CPU内存仍然很低,也可能会延迟10秒或更长时间。

我的目标是提高Apache2和Ubuntu Server在最低响应时间尽可能多的并发用户的能力。 内存和CPU不是主要的考虑因素,因为VPS规格如果达到极限,可以扩大规模。 我怎样才能做到这一点?

我到目前为止所做的:

  1. configurationulimit /etc/security/limits.conf并添加以下内容:

    • 软nofile 40000
    • 努力nofile 40000
    • 软nproc 40000
  2. 将以下行添加到/etc/pam.d/common-session

    会话需要pam_limits.so

  3. configurationApache2 /etc/apache2/mods-enabled/mpm_prefork.conf

     <IfModule mpm_prefork_module>
             StartServers 20
             MinSpareServers 25
             MaxSpareServers 100
             MaxRequestWorkers 150
             MaxConnectionsPerChild 0

             MaxClients 8192
             MaxRequestsPerChild 0
             ServerLimit 8192
      </ IfModule>configuration
  1. 将以下行添加到/etc/sysctl.conf

    fs.file-max = 2097152

响应时间似乎有所改善(虽然有些请求仍然延迟),但不令人满意,因为它仍然比非高峰时间慢得多。

停止使用prefork模块并开始在apache中使用事件mpm。 Prefork是旧的方法,并向前移动你想安装事件MPM。

这可能不是你的Web服务器,而是链中的其他东西。

  1. DNS。 在情况下,当它不是明显的数据库时,很有可能是DNS。 做一个nslookup,看看命令需要多长时间。 然后查找几个域。
  2. 它的networking,做一个跟踪路由,看看你的networking上的任何跳是花时间比平时长。
  3. Netstat -i 5查看networking接口是否有任何错误。
  4. 确保KeepAlive已打开。 特别是如果你像阿贾克斯重的网站,你会提高性能。

我不相信切换MPM会帮助你。 你的情况不是资源限制。 其他的东西。