我有一个运行一些服务(例如Apache
、Mysql
)Redis
和一些NodeJS
应用程序的网络服务器。在流量大的时候,我的服务器似乎无法支持重负载。当这种情况发生时,我经常在尝试访问页面时收到以下消息mysql
:
Warning: mysqli_connect(): (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (99)
此消息以间歇性的形式出现,大多数情况下,如果我刷新页面,此消息不会再次出现。此外,我不认为这是我的 mysql 配置的问题,因为我一直从 mysqltuner.pl 获得以下结果:
[OK] Highest usage of available connections: 74% (336/450)
同样,Redis Server 显示无法连接服务器的消息:
Could not connect to Redis at 127.0.0.1:6379
我在这段时间监控我的服务器,我发现大约 2G 的 RAM(没有使用任何字节的 SWAP)用于 Mysql、Redis 或 NodeJS 的进程。在花了一些时间研究之后(没有北方可循),我阅读了一些关于短暂端口的信息。因此,我尝试调整参数 net.ipv4.ip_local_port_range
以增加我的端口范围(从调整32768 61000
到10000 65000
)。结果很糟糕!我的网络服务器将其响应时间从平均 180~200 毫秒提高到大约 6000 毫秒,并且服务器的平均负载也增加了很多(但错误消息消失了!)。
我的 NodeJS 应用(全部)都使用 Socket.io 并从服务器上的其他端口响应。我正在尝试找出该问题的解决方案。这是端口可用性问题吗?为什么 net.ipv4.ip_local_port_range 参数调整会减慢服务器速度?
服务器配置:
- Ubuntu 服务器 x64
- 英特尔至强 E5520 四核
- 8GB RAM
- 2x 1000 GB SATA 2.5 英寸 5.400 rpm(RAID 1)
- 2x 60 GB SSD 2,5" (RAID1)(数据库内容全部放在这里)
答案1
如果您的问题是如何在高峰时段最好地监控您的服务器,而这在高峰时段很难做到,我会寻找一些轻量级的工具来帮助监控。 Top、ps 和 df不要总是剪它。
我用过收集捕获我的分区、内存、CPU、Apache、MySQL 和其他东西上的数据点。它会捕获数据并保存这些数据点,然后你需要一些其他工具来检索数据 - 例如一些用于显示数据的 Web 前端。
然后进行故障排除,也许可以使用一个工具来测试您的服务器并创建高使用率场景。Apache Benchmark (ab) 或 Siege 是很好的工具。