You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Petr Újezdský (Jira)" <ji...@apache.org> on 2021/08/31 21:08:00 UTC

[jira] [Updated] (AMQ-8364) ActiveMQ runs at different PID when using console version

     [ https://issues.apache.org/jira/browse/AMQ-8364?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Petr Újezdský updated AMQ-8364:
-------------------------------
    Affects Version/s: 5.16.3

> ActiveMQ runs at different PID when using console version
> ---------------------------------------------------------
>
>                 Key: AMQ-8364
>                 URL: https://issues.apache.org/jira/browse/AMQ-8364
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.15.10, 5.16.3
>            Reporter: Petr Újezdský
>            Priority: Major
>
> When using {{/opt/activemq/bin/activemq console}} the jar invocation is done using {{exec}}. However this is not done properly, the {{java}} process itself still has different PID than the main process.
> This is problem inside docker environment where the app should run with PID 1 to properly listen to {{KILL}} signal to stop gracefully. I have filed a bug downstream in docker version https://github.com/rmohr/docker-activemq/issues/34#issuecomment-907159964 but found out the problem is in ActiveMQ itself.
> When run using {{console}} parameter, the code goes
> {code}
> case "$1" in
>   ...
>   console)
>     invoke_console
>     exit $?
>     ;;
> {code}
> {code}
> invoke_console(){
>     ...
>     EXEC_OPTION="exec"
>     ...
>     invokeJar "$ACTIVEMQ_PIDFILE"
>     ...
> }
> {code}
> {code}
> invokeJar(){
>    ...
>    else
>       $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\" $ACTIVEMQ_OPTS $ACTIVEMQ_DEBUG_OPTS \
>               -Dactivemq.classpath=\"${ACTIVEMQ_CLASSPATH}\" \
>               -Dactivemq.home=\"${ACTIVEMQ_HOME}\" \
>               -Dactivemq.base=\"${ACTIVEMQ_BASE}\" \
>               -Dactivemq.conf=\"${ACTIVEMQ_CONF}\" \
>               -Dactivemq.data=\"${ACTIVEMQ_DATA}\" \
>               $ACTIVEMQ_CYGWIN \
>               -jar \"${ACTIVEMQ_HOME}/bin/activemq.jar\" $COMMANDLINE_ARGS" $DOIT_POSTFIX
>       RET="$?"
>    fi
>    ...
> {code}
> The problem is here
> {code}
> $EXEC_OPTION $DOIT_PREFIX "\"$JAVACMD\"
> {code}
> This translates into something like
> {code}
> exec sh -c 'java some.jar args'
> {code}
> and the PIDs are as follows (note the wrong PID 23 for java itself)
> {code}
> activemq@a9d909468041:/opt/apache-activemq-5.15.10$ ps axu
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> activemq     1  0.0  0.0   4296   708 ?        Ss   12:05   0:00 sh -c "/opt/java/bin/java" -Xms64M -Xm
> activemq    23 29.3  1.5 5481824 251840 ?      Sl   12:05   0:12 /opt/java/bin/java -Xms64M -Xmx1G -Dja
> activemq   108  0.1  0.0  18144  3172 pts/0    Ss   12:06   0:00 /bin/bash
> activemq   164  0.0  0.0  36644  2832 pts/0    R+   12:06   0:00 ps axu
> {code}
> IMHO the code should be something like
> {code}
> $EXEC_OPTION $DOIT_PREFIX "$EXEC_OPTION \"$JAVACMD\"
> {code}
> that translates into something like
> {code}
> exec sh -c 'exec java some.jar args'
> {code}
> and the PIDs will be correct
> {code}
> activemq@a9d909468041:/opt/apache-activemq-5.15.10$ ps axu
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> activemq     1  161  1.6 5282132 275824 ?      Ssl  12:08   0:11 /opt/java/bin/java -Xms64M -Xmx1G -Dja
> activemq    61  0.5  0.0  18144  3220 pts/0    Ss   12:08   0:00 /bin/bash
> activemq    82  0.0  0.0  36644  2788 pts/0    R+   12:08   0:00 ps axu
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)