我有一个运行诸如Apache , Mysql , Redis和一些NodeJS应用程序之类的服务的web服务器。 在高stream量时代,我的服务器似乎不支持重负载。 当它正在发生,经常当我尝试访问一个页面时,我从mysql收到以下消息:
Warning: mysqli_connect(): (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (99)
这个消息以intermitent的forms出现,大多数情况下,如果我刷新页面这个消息不会再出现。 此外,我不认为这是我的configuration为MySQL的问题,因为我总是从mysqltuner.pl以下结果:
[OK] Highest usage of available connections: 74% (336/450)
同样,Redis服务器显示连接到服务器的问题消息:
Could not connect to Redis at 127.0.0.1:6379
我在监视服务器的时间,我想到了2G的内存(没有使用SWAP的任何字节的Mysql,Redis或NodeJS的过程。花了一些时间在研究(没有北方跟随) ,我读了一些关于短暂的端口,所以我试图调整net.ipv4.ip_local_port_range参数来增加我的端口范围(调整从32768 61000到10000 65000 )。结果是可怕的!我的web服务器提高了它的平均响应时间180〜200ms到6000ms左右,服务器的负载平均值也提高了很多(但错误信息消失了!)。
我的NodeJS应用程序(所有这些应用程序)使用Socket.io,并从我的服务器上的不同por响应。 我试图找出问题的解决scheme是什么。 这是一个端口可用性问题? 为什么net.ipv4.ip_local_port_range参数会调整服务器速度?
服务器configuration:
如果您的问题是如何在高峰时段监控您的服务器,在峰值时很难做到这一点,我会寻找一些轻量级的工具来帮助监控。 顶部,PS和DF并不总是削减它。
我用collectd来捕获分区,内存,CPU,Apache,MySQL和其他东西的数据点。 它捕获数据并保存这些数据点,然后您需要其他一些工具来检索数据 – 例如一些Web前端来显示数据 。
然后排除故障,也许是一个工具来打你的服务器,并创build一个高使用率的scheme。 Apache基准(ab)或围攻是很好的工具。