为什么我在Ubuntu上看到同一服务的多个运行实例(Elasticsearch),但只有一个响应?

时间:2015-07-23 23:16:06

标签: java ubuntu elasticsearch salt-stack

我在一个小型的AWS Ubuntu盒子上运行Elasticsearch(ES),并且整体调整盒子的性能。

在最近使用Saltstack进行部署之后,我注意到运行实例的数量从两个增加到三个 - 在两个几个月之后。实例中的上升似乎对应于内存使用量的增加。 enter image description here

我用ps确认盒子上运行了三个java进程:

PID TTY          TIME CMD
9295 ?         00:02:08 java
14398 ?        00:00:12 java
26175 ?        00:40:48 java

当我使用命令" sudo service elasticsearch stop"停止ES时,我仍然有两个根据ps运行的ES进程:

PID TTY          TIME CMD
9295 ?         00:02:08 java
26175 ?        00:40:48 java

我重新启动了服务,然后又重新开了三个。这对我来说似乎很奇怪,因为似乎有两个服务对stop命令没有反应。 (这可能是所谓的僵尸或孤儿过程吗?)

我手动杀死了所有三个进程并重新启动了ES,现在只有一个ES实例。我想知道这些任性的java进程是否与其他一些服务有关,但在杀死所有这三个之后,New Relic确认内存使用和进程大幅下降 - 所以它们肯定是所有与ES相关的进程:

enter image description here

我的问题是,在部署之后,为什么运行实例的数量会增加? 是否存在功能性的Elasticsearch原因,或者这是一个错误? 什么会导致Elasticsearch或Ubuntu上的任何服务一般进入这种无响应的状态?

非常感谢任何见解!

1 个答案:

答案 0 :(得分:0)

运行此命令后会得到什么:

 lsof -i :9200-9399 | tail -n +2 | awk '{print $2}' | xargs ps -p

lsof -i :9200-9399将列出端口范围9200-9399上的所有打开文件,即ES使用的默认端口范围。如果配置不同,请更改范围。

tail -n +2将从lsof命令中删除第一个输出行,它包含列标题但没有用

awk '{print $2}'将仅从lsof输出中获取进程ID(PID)

最后,xargs ps -p将运行ps命令,以找出在awk命令提取的PID下运行的进程。

你应该得到如下的输出,这可能会让你开始调查。

  PID TTY           TIME CMD
21199 ttys011    4:39.26 /usr/bin/java -Xms256m -Xmx1g....
22234 ttys012    5:12.22 /usr/bin/java -Xms256m -Xmx1g....
23444 ttys013    3:33.54 /usr/bin/java -Xms256m -Xmx1g....