php - Web 服务器非常慢,CPU 为 0-5%,RAM 为 500/1024

标签 php javascript jquery ajax htop

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

然后,当大约有 10 个用户在线时,整个网站速度慢得令人难以置信,甚至崩溃了。我想,速度慢是因为 php 脚本刷新太频繁(每秒 >10 次)。

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

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

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

最佳答案

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

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

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

作为一般策略,我会添加计时器并尝试将问题一分为二。记录请求开始和结束的时间,如果时间很短,那么您就知道延迟发生在其他地方。

此外,对于这种工作负载,您应该考虑推送更新而不是轮询。这样您就可以推送一条消息来更新监听客户端,并且它们不必频繁轮询即可立即获取新消息。

关于php - Web 服务器非常慢,CPU 为 0-5%,RAM 为 500/1024,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487982/

相关文章:

javascript - 在 Safari 扩展中,如何验证打开的页面是某种格式的文件?

javascript - 点击事件时无法上传 dicom 图像 - webMango

java - 获取 JSON 弹出窗口以保存或打开对话框而不是实际内容?

javascript - 如何使用jquery打印div内容

php - 如何在 phpunit 测试运行时禁用在控制台上显示应用程序日志消息?

php - 在 PHP MySQL 查询中无法搜索以获取 OR 语句

php - 当 mysql_connect 对 IIS 上的 PHP 不起作用时没有返回错误消息

PHP JQuery/JS - 将 PHP 变量设置为 Javascript 变量?

javascript - 检查页面上是否存在某个元素,如果存在则执行一个函数,如果不存在则不执行任何操作

javascript - Emberjs Controller 需要的不是更新 View