当风暴终止拓扑时,Windows Storm Supervisor错误退出

时间:2018-12-21 09:20:18

标签: apache-storm

风暴版本:1.2.2 平台:Windows Server 2008

我已经在一台Linux服务器和一台Windows服务器上安装了风暴集群。这两个服务器都已部署了nimbus和超级用户服务。 我启动了一个拓扑,然后杀死了它。我发现Windows服务器上的主管进程错误退出,Windows服务器上的辅助进程仍然存在。

它表明:

  

“错误:无法杀死pid xxx进程,只能终止此操作   进程(使用\ F选项)。“

错误消息从下面的图片转换: error-info-pic

我不知道此错误,我已经使用Google搜索了一些答案,但没有找到任何答案,因此我将此消息发送给您。我希望你能帮助我。

更新于2018/12/24

我发现工作程序将启动一个拓扑过程,首先杀死拓扑错误,然后在杀死主管时杀死工作程序错误。

我已经编译了一个新的storm-core.jar,并在主管杀死工人时添加了一些详细日志,错误详细日志如下:

  

org.apache.storm.shade.org.apache.commons.exec.ExecuteException:进程退出,错误为128(退出值:128)       在org.apache.storm.shade.org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:377)〜[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.shade.org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)〜[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.shade.org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)〜[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.utils.Utils.execCommand(Utils.java:1914)〜[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.utils.Utils.sendSignalToProcess(Utils.java:1943)[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.utils.Utils.killProcessWithSigTerm(Utils.java:1962)[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.daemon.supervisor.Container.kill(Container.java:166)[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.daemon.supervisor.Container.kill(Container.java:184)[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.daemon.supervisor.Slot.killContainerForChangedAssignment(Slot.java:311)[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.daemon.supervisor.Slot.handleRunning(Slot.java:527)[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.daemon.supervisor.Slot.stateMachineStep(Slot.java:265)[storm-core-1.2.2.jar:1.2.2]       在org.apache.storm.daemon.supervisor.Slot.run(Slot.java:752)[storm-core-1.2.2.jar:1.2.2]

2 个答案:

答案 0 :(得分:0)

这是一个黑暗的镜头,但是您是否以管理员身份运行Storm进程? Storm需要在Windows上以管理员身份运行,或者您需要设置运行Storm的用户以允许进行符号链接。

关于在Windows https://storm.apache.org/releases/2.0.0-SNAPSHOT/windows-users-guide.html上运行Storm的一些知识。

答案 1 :(得分:0)

我在“ org.apache.storm.utils.Utils :: sendSignalToProcess”函数中编译了一个新的storm-core.jar,我添加了一些日志消息,如下所示:

public static void sendSignalToProcess(long lpid, int signum) throws IOException {
    String pid = Long.toString(lpid);
    try {
        // add this log
        LOG.info("Added: {}.", signum);
        if (isOnWindows()) {
            // change this condition
            if (signum == SIGKILL || signum == SIGTERM) {
                // change this code
                execCommand("taskkill", "/F", "/T", "/pid", pid);
            } else {
                execCommand("taskkill", "/pid", pid);
            }
        } else {
            execCommand("kill", "-" + signum, pid);
        }
    } catch (ExecuteException e) {
        LOG.info("Error when trying to kill {}. Process is probably already dead.", pid);
    } catch (IOException e) {
        LOG.info("IOException Error when trying to kill {}.", pid);
        throw e;
    }
}

我发现,当风暴杀死拓扑时,主管将信号15(term)发送给工作人员,但是当使用信号15时,主管无法杀死该工人,必须使用信号9(kill)强制杀死。因此,我决定在Windows服务器上使用新的编译后的storm-code.jar。

我仍然不知道为什么主管不能杀死工人使用信号15,而只能使用信号9(即:taskkill use / F选项可以杀死工人),但这应该是Windows问题,所以我关闭了这个问题

相关问题