1

我编写了一个网络聊天程序,它通过 ajax 命令刷新 a 来显示新条目。该命令启动了一个 php 文件,然后创建了显示最新 25 个条目的聊天日志。Ajax 每秒都会为每个用户刷新一次。

然后,当大约有 10 个用户在线时,整个网站变得异常缓慢,甚至崩溃了。我认为,缓慢来自于频繁刷新 php 脚本(每秒 > 10 次)。

我查看了我的虚拟服务器,启动了 htop 来查看进程。CPU几乎没有使用。它介于 0% 和最高 5% 之间。RAM 只使用了一半,大约 500 MB 的 1GB(这是标准的,甚至在聊天上线之前)。

我通过创建一个仅创建 1 个聊天日志的 html 缓存站点并将其提供给用户的 cron 作业解决了这个问题。

但是,我仍然想知道为什么服务器运行如此缓慢,即使 CPU 和 RAM 根本不忙?

4

1 回答 1

1

如果您没有最大化 cpu,那么它会阻塞其他资源。一些可能的候选人:

  • 每个请求都有一个数据库查询吗?如果是这样,他们需要多长时间?

  • 您有多少线程可用于处理请求?每个请求需要多长时间?如果只有一个线程处理请求,那么一旦请求花费超过 10 毫秒,每秒 100 个请求的传入负载(听起来就像您正在做的那样)将开始备份,充其量。

作为一般策略,我会添加计时器并尝试将问题一分为二。在请求的开始和结束时花点时间,如果这个时间很小,那么你知道延迟在其他地方。

此外,对于这种工作负载,您应该考虑推送更新而不是轮询。这样,您可以推送一条消息来更新正在侦听的客户端,而他们不必经常轮询以立即获取新消息。

于 2012-09-19T06:12:40.357 回答