在测试服务器上发现 ES 进程总是挂掉,于是看 ES 的 gc 情况:
先查到进程的 PID 号,然后使用 jstat 指令:
jstat -gc PID 5000
5000 是毫秒,每 5 秒刷新一次打印。
查看日志如下:
可以看到经过一段时间的观察,新生代的 YoungGC 并没有发生,一直是 18 次没改变,而 FullGC 在新生代内存用完时就会出现一次,非常的频繁。
原因很明显,年老代的内存大小只有 512K 字节,特别小,导致老年代一直处于没有剩余空间的状态,所以每次的 GC 都会触发 FullGC 。
之前的内存没有设置新生代和老年代的比例,导致 16G 内存完全分给了新生代,其中 Eden 区 12G,survivor1 和 survivor2 各 2G 左右大小。
调整时,加入新老生代的内存比例即可。
-