网站瘫痪了...是因为 MySQL 连接处于休眠状态吗?

网站瘫痪了...是因为 MySQL 连接处于休眠状态吗?

我刚刚接手了一个网站的管理,发现了一些问题:

当网站流量达到峰值时(当我们的帖子出现在某些分发列表/RSS 提要中时会发生这种情况),服务器会变得繁忙,然后冻结(错误 502)。

它由 AWS 托管,通过 Cloudwatch 我可以看到,在高流量峰值(非高峰时段平均流量高达 100 倍)之后,CPU 使用率在 1-1:30 小时内保持 100%(正常情况下不会超过 20%)。

  • 每分钟 Apache 请求数(非峰值):约 300
  • Apache 每分钟请求数,峰值:约 3000

Tomcat 和 Grails 日志没有说太多,“只是”一遍又一遍地重复这一点:

[http-bio-8080-exec-299] 错误 util.JDBCExceptionReporter - [http-bio-8080-exec-299] 超时:池为空。无法在 30 秒内获取连接,无可用连接[size:100; busy:100; idle:0; lastwait:30000]。

所以我猜问题在于,当流量如此之大时,30 秒超时就变成了“敌人”,因为有太多用户等待服务。

应用程序级别的数据库配置是:

池化 = true

      properties {

         maxActive = 100
         maxIdle = 25
         minIdle = 5
         initialSize = 5
         minEvictableIdleTimeMillis=300000
         timeBetweenEvictionRunsMillis=300000
         numTestsPerEvictionRun=3
         testOnBorrow=true
         testWhileIdle=true
         testOnReturn=true
         validationQuery="SELECT 1"
      }

关于如何调整这些值有什么建议吗?

谢谢!

更新:该网站再次瘫痪,我已经能够运行“top”命令,这是我所看到的:

top - 18:46:33 up  2:42,  2 users,  load average: 1.04, 1.56, 1.78
Tasks: 136 total,   1 running, 135 sleeping,   0 stopped,   0 zombie
Cpu(s): 25.0%us,  0.2%sy,  0.0%ni,  0.0%id,  0.0%wa, 28.6%hi,  0.0%si, 46.1%st
Mem:   3843124k total,  3385800k used,   457324k free,    42800k buffers
Swap:        0k total,        0k used,        0k free,   681368k cached
 1340 tomcat    20   0 3611m 2.3g  11m S 61.3 64.0  51:18.60 java
 2609 root      20   0 15140 1252  916 R  0.3  0.0   0:00.14 top
    1 root      20   0 19488 1600 1284 S  0.0  0.0   0:00.88 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.23 ksoftirqd/0
    4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0
...

相关内容