mysql和redis服务在高stream量时间不可用

我有一个运行诸如ApacheMysqlRedis和一些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 6100010000 65000 )。结果是可怕的!我的web服务器提高了它的平均响应时间180〜200ms到6000ms左右,服务器的负载平均值也提高了很多(但错误信息消失了!)。

我的NodeJS应用程序(所有这些应用程序)使用Socket.io,并从我的服务器上的不同por响应。 我试图找出问题的解决scheme是什么。 这是一个端口可用性问题? 为什么net.ipv4.ip_local_port_range参数会调整服务器速度?

服务器configuration:

  • Ubuntu服务器x64
  • 英特尔至强E5520四核
  • 8GB的RAM
  • 2个1000 GB SATA 2,5“5.400 rpm(RAID 1)
  • 2个60 GB的SSD 2,5“(RAID1)(数据库的东西都在这里)

如果您的问题是如何在高峰时段监控您的服务器,在峰值时很难做到这一点,我会寻找一些轻量级的工具来帮助监控。 顶部,PS和DF并不总是削减它。

我用collectd来捕获分区,内存,CPU,Apache,MySQL和其他东西的数据点。 它捕获数据并保存这些数据点,然后您需要其他一些工具来检索数据 – 例如一些Web前端来显示数据 。

然后排除故障,也许是一个工具来打你的服务器,并创build一个高使用率的scheme。 Apache基准(ab)或围攻是很好的工具。