今天,把Code里面的e.printStackTrace全部用自己的log函数替换掉了,因为貌似System.out.println很浪费时间,而且大量的异常输出到控制台会降低程序的稳定性。
我们的项目里面需要一个webserver,但是我实在对Jsp+Tomcat的性能不放心,自己写了一个非常精简的webserver。性能我很满意,用ab进行测试,速度可以跟同台服务器上lighttpd静态文件的速度媲美。
在每日访问量10万以内的情况下,服务两个星期左右会产生一次锁死,kill也无法关闭进程。只有利用kill -9才能关闭进程。说实话,这种锁死频率倒还可以接受。然而在每日访问量峰值达到20万的时候,高峰日可能会有2-3次的锁死,这让我很挠头。我想了很多办法,还是没有明显的改善。
今天去掉了e.printStackTrace,希望明天webserver的稳定性可以提高。
有对这方面经验丰富的朋友么?请告诉我Java网络服务如何能长时间稳定运行呢?谢谢!
technorati tags: java, log, printStackTrace, System.out.println, webserver


请不要吝惜您的评论,每一条评论,都是我在漫漫长夜前行的力量
4 条评论:
哪种锁死呢?查过thread dump有没有报告死锁么?
7:56 下午
如果是长期运行的服务性程序,可以在启动时使用--server参数,以server方式启动程序,会比默认的client方式要效率高
另外可以用profile观察程序运行的详细情况,应该有帮助
12:36 下午
没有遇到类似问题,首先我觉得应该解决你抛Exception的问题.为什么要让它总是exception呢?明显不对的嘛.
2:15 下午
谢谢大家,现在已经确定,原来以为是java代码不稳定造成的锁死,实际上是反向代理压力过大,系统负载太高造成的。现在经过把反向代理挪到独立的服务器的处理后,java程序已经非常稳定的运行了一个星期了
1:23 上午
发表评论
<< 主页