最近遇到了一个关于OpenFusion的问题,系统在运行了一段时间(几天至30多天不等),Notification Service Java进程中堆占用的内存超过了memory limit,使得内部的MemoryManager不断的去调用system.gc()去释放内存,进而导致新收到的event全部丢弃。这时对外部的显示是系统反应缓慢,直至响应超时。
最终发现了导致这个问题的原因,
1)采购的一批机器,这些PC的名字不区分大小写都是一样的(例如 aa, AA),导致系统的/etc/hosts中关于一个机器名会有不同的ip存在,而/etc/hosts中是不会区分大小写的。
2)系统的tcp保活时间设置,错误的认为tcp_keepalive_time在linux和solaris系统中的单位都是毫秒,在linux中的单位其实是秒!这导致了有些client已经断掉,但是socket仍在打开状态。

本文详细分析了一个OpenFusion系统中遇到的内存泄露问题,原因在于采购的PC名不区分大小写导致的/etc/hosts文件中存在重复IP记录,以及TCP保活时间配置错误,将Linux中的单位秒误认为是Solaris中的毫秒,导致socket长时间保持打开状态。通过修改主机文件和调整TCP保活时间,问题得到解决。
910

被折叠的 条评论
为什么被折叠?



