2007-07-27

Java网络服务如何能长时间稳定运行呢?

今天,把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 technorati tags: , , , ,

请不要吝惜您的评论,每一条评论,都是我在漫漫长夜前行的力量

4 条评论:

Blogger IUSR 说...

哪种锁死呢?查过thread dump有没有报告死锁么?

7:56 下午

 
Anonymous Yurii 说...

如果是长期运行的服务性程序,可以在启动时使用--server参数,以server方式启动程序,会比默认的client方式要效率高
另外可以用profile观察程序运行的详细情况,应该有帮助

12:36 下午

 
Blogger tangtang 说...

没有遇到类似问题,首先我觉得应该解决你抛Exception的问题.为什么要让它总是exception呢?明显不对的嘛.

2:15 下午

 
Blogger tiny 说...

谢谢大家,现在已经确定,原来以为是java代码不稳定造成的锁死,实际上是反向代理压力过大,系统负载太高造成的。现在经过把反向代理挪到独立的服务器的处理后,java程序已经非常稳定的运行了一个星期了

1:23 上午

 

发表评论

<< 主页