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

Artur Linhart updated DAEMON-412:
---------------------------------
    Description: 
In the case the user specifies some from the the NativeMemoryTracking 
parameters (see 
[https://docs.oracle.com/en/java/javase/11/vm/native-memory-tracking.html#GUID-0DB3B8D1-8D7D-447F-B6FF-15620103EE47
 
|https://docs.oracle.com/en/java/javase/11/vm/native-memory-tracking.html#GUID-0DB3B8D1-8D7D-447F-B6FF-15620103EE47]
) like 

-XX:NativeMemoryTracking=summary

in Windows service registry, restarts the service, so the option can be seen in 
the log file by the startup options (for example in Tomcat logs like 
catalina.log), then the Native memory tracking is still disabled and does not 
work. If you try with

jcmd <pid> VM.native_memory summary

to get the information about the native JVM memory in the tomcats JVM, the jcmd 
call fails with the message

<pid>:
Native memory tracking is not enabled

and in the Tomcat's log file can be found following error message:

Java HotSpot(TM) 64-Bit Server VM warning: Native Memory Tracking did not setup 
properly, using wrong launcher? 

The problem seems to be in the JVM launcher Procrun, which dies not initialize 
the JVM properly - as far as I have understood from this blog: 
[https://blogs.oracle.com/poonam/using-nmt-with-custom-jvm-launcher 
|https://blogs.oracle.com/poonam/using-nmt-with-custom-jvm-launcher]
The Procrun.exe has to define some environment variable before the start of 
JVM, etc. to get the native memory tracking to work.

Known workaround is the start of Tomcat from the command line, but this is no 
option in the productive environment, where you have to let the service run for 
longer time to collect the proper result and maybe also as some different user 
because of security concerns, then such option is simply out of possible 
scenarios. So the Tomcat service JVM cannot be in such circumstances tracked by 
NMT at all, what is the problem in the mission-critical applications.

The Procrun should be modified in the way it enables the NMT in the windows 
service by the startup, by setting the environment variable 
NMT_LEVEL_<pid> to the value "detail" or "summary" (or "off" if unspecified) in 
the dependency on the specified or unspecified option of 
-XX:NativeMemoryTracking
like done normally by java.exe
Remark: Also change of the startup mode from "jvm" to "exe" or "java" does not 
help,. then the windows service does not start at all.

See also the Tomcat bug 
[https://bz.apache.org/bugzilla/show_bug.cgi?id=63922|https://bz.apache.org/bugzilla/show_bug.cgi?id=63922]
which has been qualified as invalid because the problem seems to be in is in 
PROCRUN.

See also the bug [TOMEE-2738]

This will probably affect every java app handled by the Procrun Daemon, if 
installed and started as Windows service, not only Tomcat.


  was:
In the case the user specifies some from the the NativeMemoryTracking 
parameters (see 
[https://docs.oracle.com/en/java/javase/11/vm/native-memory-tracking.html#GUID-0DB3B8D1-8D7D-447F-B6FF-15620103EE47
 
|https://docs.oracle.com/en/java/javase/11/vm/native-memory-tracking.html#GUID-0DB3B8D1-8D7D-447F-B6FF-15620103EE47]
) like 

-XX:NativeMemoryTracking=summary

in Windows service registry, restarts the service, so the option can be seen in 
the log file by the startup options, then the Native memory tracking is still 
disabled and does not work. If you try with

jcmd <pid> VM.native_memory summary

to get the information about the native JVM memory in the tomcats JVM, the jcmd 
call fails with the message

<pid>:
Native memory tracking is not enabled

and in the Tomcat's log file can be found following error message:

Java HotSpot(TM) 64-Bit Server VM warning: Native Memory Tracking did not setup 
properly, using wrong launcher? 

The problem seems to be in the JVM launcher Procrun, which dies not initialize 
the JVM properly - as far as I have understood from this blog: 
[https://blogs.oracle.com/poonam/using-nmt-with-custom-jvm-launcher 
|https://blogs.oracle.com/poonam/using-nmt-with-custom-jvm-launcher]
The Procrun.exe has to define some environment variable before the start of 
JVM, etc. to get the native memory tracking to work.

Known workaround is the start of Tomcat from the command line, but this is no 
option in the productive environment, where you have to let the service run for 
longer time to collect the proper result and maybe also as some different user 
because of security concerns, then such option is simply out of possible 
scenarios. So the Tomcat service JVM cannot be in such circumstances tracked by 
NMT at all, what is the problem in the mission-critical applications.

The Procrun should be modified in the way it enables the NMT in the windows 
service by the startup, by setting the environment variable 
NMT_LEVEL_<pid> to the value "detail" or "summary" (or "off" if unspecified) in 
the dependency on the specified or unspecified option of 
-XX:NativeMemoryTracking
like done normally by java.exe
Remark: Also change of the startup mode from "jvm" to "exe" or "java" does not 
help,. then the windows service does not start at all.

See also the Tomcat bug 
[https://bz.apache.org/bugzilla/show_bug.cgi?id=63922|https://bz.apache.org/bugzilla/show_bug.cgi?id=63922]
which has been qualified as invalid because the problem seems to be in is in 
PROCRUN.

See also the bug [TOMEE-2738]

This will probably affect every java app handled by the Procrun Daemon, if 
installed and started as Windows service, not only Tomcat.



> Tomcat started as windows service does not support Java Native Memory 
> Tracking feature probably because of improper JVM initialization by Procrun
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DAEMON-412
>                 URL: https://issues.apache.org/jira/browse/DAEMON-412
>             Project: Commons Daemon
>          Issue Type: Bug
>          Components: Procrun
>         Environment: Windows generally (tested on Windows Server 2012 R2 but 
> the problem occurs probably, like the user in the internet write, on every 
> Windows version)
>            Reporter: Artur Linhart
>            Priority: Major
>
> In the case the user specifies some from the the NativeMemoryTracking 
> parameters (see 
> [https://docs.oracle.com/en/java/javase/11/vm/native-memory-tracking.html#GUID-0DB3B8D1-8D7D-447F-B6FF-15620103EE47
>  
> |https://docs.oracle.com/en/java/javase/11/vm/native-memory-tracking.html#GUID-0DB3B8D1-8D7D-447F-B6FF-15620103EE47]
> ) like 
> -XX:NativeMemoryTracking=summary
> in Windows service registry, restarts the service, so the option can be seen 
> in the log file by the startup options (for example in Tomcat logs like 
> catalina.log), then the Native memory tracking is still disabled and does not 
> work. If you try with
> jcmd <pid> VM.native_memory summary
> to get the information about the native JVM memory in the tomcats JVM, the 
> jcmd call fails with the message
> <pid>:
> Native memory tracking is not enabled
> and in the Tomcat's log file can be found following error message:
> Java HotSpot(TM) 64-Bit Server VM warning: Native Memory Tracking did not 
> setup properly, using wrong launcher? 
> The problem seems to be in the JVM launcher Procrun, which dies not 
> initialize the JVM properly - as far as I have understood from this blog: 
> [https://blogs.oracle.com/poonam/using-nmt-with-custom-jvm-launcher 
> |https://blogs.oracle.com/poonam/using-nmt-with-custom-jvm-launcher]
> The Procrun.exe has to define some environment variable before the start of 
> JVM, etc. to get the native memory tracking to work.
> Known workaround is the start of Tomcat from the command line, but this is no 
> option in the productive environment, where you have to let the service run 
> for longer time to collect the proper result and maybe also as some different 
> user because of security concerns, then such option is simply out of possible 
> scenarios. So the Tomcat service JVM cannot be in such circumstances tracked 
> by NMT at all, what is the problem in the mission-critical applications.
> The Procrun should be modified in the way it enables the NMT in the windows 
> service by the startup, by setting the environment variable 
> NMT_LEVEL_<pid> to the value "detail" or "summary" (or "off" if unspecified) 
> in the dependency on the specified or unspecified option of 
> -XX:NativeMemoryTracking
> like done normally by java.exe
> Remark: Also change of the startup mode from "jvm" to "exe" or "java" does 
> not help,. then the windows service does not start at all.
> See also the Tomcat bug 
> [https://bz.apache.org/bugzilla/show_bug.cgi?id=63922|https://bz.apache.org/bugzilla/show_bug.cgi?id=63922]
> which has been qualified as invalid because the problem seems to be in is in 
> PROCRUN.
> See also the bug [TOMEE-2738]
> This will probably affect every java app handled by the Procrun Daemon, if 
> installed and started as Windows service, not only Tomcat.



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

Reply via email to