Originally wanted to organize themselves, found that there have been previous finishing, and the perfect solution to my problem, so reproduced, thanks to share
Transferred from: http://trinea.iteye.com/blog/1196400
For JPS more familiar with the analysis of the second part can be viewed directly
1, the role of JPS
JPS similar to the Linux PS command, the difference is that PS is used to display the process, and JPS only shows the Java process, is exactly the current user started part of the Java process information, including the process number and the short process command.
2, a Java process has been started, with JPS but the process number is not displayed
This question has been met twice, so here's a summary.
Phenomenon:
with Ps-ef|grep Java you can see the startup Java process, but the ID of the process does not exist with JPS view. We'll know later. In this case,Jconsole, JVISUALVM may not be able to monitor the process, and other Java-brought tools may not be available
Analysis:
When the Java program starts, the default (note default) creates a new file in the /tmp/hsperfdata_username directory with the process ID as the filename , and stores information about the JVM's run in that file . The username is the current user name, and the/tmp/hsperfdata_username directory holds all the Java process information that the user has started. For Windows machine/tmp, use Windows to store temporary file directories instead.
The data source for tools such as JPS, Jconsole, and JVISUALVM is this file (/tmp/hsperfdata_username/pid). So when the file does not exist or cannot be read, it will appear JPS cannot view the process number, Jconsole cannot monitor the problem
Reason:
(1), disk read and write, directory permissions issues
If the user does not have permission to write the/tmp directory or the disk is full, the /tmp/hsperfdata_username/pid file cannot be created. Or the file has been generated, but the user does not have Read permission
(2), Temporary files are lost, deleted or cleaned regularly
For Linux machines, there is usually a scheduled task to clean up the temporary folder, causing the/tmp directory to be emptied. This is the first time I have encountered the cause of the phenomenon. Common tools that may periodically delete temporary directories are crontab, Redhat Tmpwatch, Ubuntu Tmpreaper, and so on.
The resulting phenomenon may be that, using Jconsole to monitor the process, it is found that the process still exists after a certain period of time, but there is no monitoring information.
(3),Java process information file storage address is set, not IN/tmp directory
We said in the above that the default is to save the process information in the /tmp/hsperfdata_username directory , but because of the reasons mentioned above 1, 2, may cause the file can not be generated or lost, so Java started with parameters (- Djava.io.tmpdir), the location of the file can be set, and JPS, Jconsole will only read from the/tmp directory, but not from the set directory reading information, this is the second time I encountered the cause of the phenomenon
The parameter for setting the file location is -djava.io.tmpdir
Other:
The /tmp/hsperfdata_username/pid file is purged after the corresponding Java process exits . If the Java process exits abnormally (such as kill-9), then the PID file is retained until a Java command is executed or a command that loads the JVM program (such as JPS, Javac, jstat) clears all useless PID files
For more information about JPS, see Oracle Introduction http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html
JPS does not display Java process information