我正在运行一个 Apache2 Ubuntu 服务器,它负责处理来自移动应用程序的 API 请求。
最近遇到一个瓶颈,请求量越大(并发用户越多),请求响应就越慢。之前~1 或 2几秒钟就可以了,但是一旦并发用户增加(在某些高峰时段),它可能会延迟10秒或更长时间,即使服务器负载,中央处理器和记忆仍然很低。
我的目标是提高 Apache2 和 Ubuntu Server 的服务能力尽可能多的并发用户以最低的响应时间。内存和 CPU 不是主要考虑因素因为 VPS 规格达到上限后可以扩展。我该怎么做?
我目前所做的:
配置 ulimit/etc/security/limits.conf并添加以下内容:
- 软文件 40000
- 硬盘 nofile 40000
- 软nproc 40000
将以下行添加到/etc/pam.d/common-session
会话需要 pam_limits.so
配置 Apache2/etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module> 启动服务器 20 最小备用服务器 25 最大备用服务器数 100 最大请求工作者 150 每个子节点的最大连接数 0 最大客户数 8192 每个孩子的最大请求数 0 服务器限制 8192 </IfModule>
将以下行添加到/etc/sysctl.conf
fs.文件最大值 = 2097152
响应时间似乎有所改善(尽管有些请求仍然延迟),但并不令人满意,因为它仍然比非高峰时段慢得多。
答案1
停止使用 prefork 模块并开始在 apache 中使用 event mpm。Prefork 是旧方法,今后您需要安装 event mpm。
答案2
这可能不是您的网络服务器,而是链中的其他服务器。
- DNS。在某些情况下,如果问题显然不是数据库,则很有可能是 DNS。执行 nslookup 并查看命令需要多长时间。然后查找几个域。
- 这是网络,执行跟踪路由,看看网络上的任何跳转是否比平时花费更长的时间。
Netstat -i 5
查看网络接口是否存在任何错误。- 确保
KeepAlive
已打开。特别是如果你的网站有 ajax 负载过大,你会提高性能。
我不认为更换 MPM 会对你有帮助。你的情况不是资源限制。而是其他原因。