本人负责的一个网站不知道为什么,由周一开始,突然间变得很慢,有时则很快.搞来搞去,搞了差不多一个星期(部份时间开发新功能去了).终于找到原因了.
服务器情况:
linux as4
Intel(R) Xeon(R) CPU 5130 @ 2.00GHz
4G内存,
300Gscsi+320GSATA硬盘.
resin 3.0.23+ lighttpd
resin启动参数
-server -verbose:gc -Xdebug -Xloggc:gc.log -Djava.awt.headless=true -XX:PermSize=128M -XX:NewRatio=4 -XX:+UseConcMarkSweepGC -XX:MaxPermSize=200m -XX:NewSize=100 -XX:MaxNewSize=128m -Xmn256m -Xms512m -Xmx512m
服务器运行一直很正常,到了周一,网站变慢,CPU占用50%以上,但内存点使用50%,其中大部分是mysql用去了.load average: 10.02, 10.03, 10.00 .
全部程序都测试过.底层代码也查过.JDK换过,RESIN版本换过,mysql配置也换过.问题依然存在.
利用resin-admin查看情况.
Total memory: | 501.44Meg |
---|---|
Free memory: | 350.37Meg |
看上去也正常.不过free memory 变化的很快,由100多M,突然变到300多M.一开始还以为是程序释放了内存.就不去管他了.
经过好多晚的调度,发现一个规律.当启动resin时,一切正常.证明跟jdk版本无关.
今天早上更新服务器程序时,发现resin目录有个gc.log文件.打开一看.全部是gc的执行记录.很多.于是使用tail命令一下.
tail -f gc.log
吓了我一跳,平均每秒就会执行一次gc.问题就在这里.是gc把服务器拖慢了.
于是就把resin的启动参数改一下,把内存改大,gc就不会这么容易触发.
-server -verbose:gc -Xdebug -Xloggc:gc.log -Djava.awt.headless=true -XX:PermSize=128M -XX:NewRatio=4 -XX:+UseConcMarkSweepGC -XX:MaxPermSize=200m -XX:NewSize=100 -XX:MaxNewSize=128m -Xmn256m -Xms1024m -Xmx1024m
现在好了,CPU占用只有0.1%左右,有时上到30%多,但很快降下来.load average: 0.05, 0.01, 0.00 <—服务器很健康.
利用resin-admin查看情况.
Total memory: | 998.44Meg |
---|---|
Free memory: | 607.76Meg |
resin平均使用400M左右的内存,一开始只配置了512给她,怪不得老是gc.呵.