今天下午线上的Jetty服务又停止响应了。不过与上次不同的是,日志里没有Too many open files的问题(看来ulimit设置管用了),看不出任何问题。于是用netstat检查网络连接,发现了大量CLOSE_WAIT状态的连接,而且都是连接到同一个IP地址。联想到程序里有调用外部网站服务的部分,检查这个IP,正是其中的一个服务。检查代码,发现开发人员使用Commons HttpClient时出了问题,居然忘记关闭连接了(method.releaseConnection();)!!后果就是对方关闭了连接,连接不断地变成CLOSE_WAIT状态,直到耗尽所有的网络资源,没法再建立连接了。
从这个教训看出,项目的研发管理真是没有到位啊!快速反复的需求、几乎可以忽略的设计、缺少代码走查、没有单元测试,怎能保证上线前发现这样的问题!
Related posts
前一段时间笔记本升级到Ubuntu 9.10后遇到了系统服务没有启动的问题,后来得知是upstart的一个bug。具体情况看看我在ServerFault回答的同样问题吧。
Related posts
今天下午,线上的Jetty服务宕机了,日志里大量的”java.io.IOException: Too many open files”错误。搜索到Freddy Chu的博客里正好有关于此的解决办法。
$ sysctl fs.file-max
$ lsof -u jetty -nn | wc -l
$ ulimit -a
$ sudo vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
同时发现了系统里也有Freddy Chu提到的”Too many CLOSE_WAIT”问题,谢谢Freddy Chu。
$ sudo vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 2
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 1800
$ sudo sysctl -p
Update(2010-01-21): root用户要特殊设置
$ sudo vi /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
Related posts
这两天又开始写些技术的东西了。
重新整理了以前的分类,发现08、09两年只写了可怜的几篇,也远离了Maemo世界。
如果腰椎恢复了,希望能重回Maemo世界,向Evan学习,能参与中文输入就更好了 :)
Related posts
Cacti和Nagios都是好用的运维监控软件,NPC(Nagios Plugin for Cacti)是一个Cacti插件,安装后可以在Cacti界面里使用Nagios的功能。官方安装文档在这里。
我的安装环境是这样的:
PHP必须安装PDO 和 JSON扩展。由于NPC使用了Ext JS,如果没有JSON扩展,NPC的界面不会出来,只能看到一个空白页面。Ubuntu 6.06下安装PDO可以参考这里。
按照官方文档安装配置好后,遇到了没有显示任何数据的问题,host, hostgroup, service, servicegroup等等都看不到。
检查了NPC的数据库表,有数据,说明NDOUtils已经工作。没有出现在界面上,说明是NPC从数据库读出来到界面显示过程中出现的问题。
用Firebug找出NPC界面为了获取显示数据的Ajax请求(比如/cacti/plugins/npc/npc.php?module=servicegroups&action=getHostStatusPortlet),直接在浏览器里访问,可以看到出了异常:Fatal error: Uncaught exception ‘Doctrine_Exception’ with message ‘Couldn’t find class NpcServicegroups’ 。显然是Doctrine没有加载到NPC定义的领域类。
经过一番对Doctrine的调试,发现原因在Doctrine类的loadModels方法(Line 516 in Doctrine.php)
$e = explode('.', $file->getFileName());
这里getFileName返回了带绝对路径的文件名,导致autoload函数失败。改成下面这样就解决了。
$e = explode('.', basename($file->getFileName()));
不过还是不明白为什么getFileName返回的是带绝对路径的文件名,是跟我的系统环境有关系吗?有熟悉PHP的朋友能解释一下就好了。
Related posts
Recent Comments