最近遇到了一个关于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仍在打开状态。