Diagnosis of Memory leakage in Java and diagnosis of Java Memory leakage
Every time I suspect a memory leak, I Have To rummaging through these commands. So, here we will summarize it for future use:
First, I use the following command to monitor the process:
1 |
while ( sleep 1 ) ; do ps -p $PID -o %cpu,%mem,rss ; done |
(New Relic is available if any)
If you see that the memory is increasing rapidly, it may be because of virtual machine settings. If you do not explicitly specify the JVM memory settings, it will set the default value to them. To obtain the default value, run the following command:
1 |
java -XX:+PrintFlagsFinal -version | grep -i HeapSize |
If none of these meets your expectation, You need to specify the JVM memory settings. You can use the following command to set the minimum and maximum heap sizes:
Although you have reasonable memory settings and can monitor the process, you may still see that the memory increases over time. To further explore the cause, you can use the following command to view the histogram of the object instance:
If you still do not have enough information, run the following command to perform a heap dump:
1 |
jmap -dump:format=b,file=/tmp/dump1.hprof $PID |
In general, I will use two heap dump and then compare them using the following jhat command:
1 |
jhat -baseline /tmp/dump1.hprof /tmp/dump2.hprof |
This command starts an HTTP server and you can use it to explore the difference between the two heap dumps. By default, the HTTP server starts port 7000. You can access this port in a browser.
If you have a firewall that can be accessed through SSH, you can use the following command to connect to the Port:
1 |
ssh -L 7000 :localhost: 7000 $HOST |
Scroll down to the bottom of the first page and you will see two useful links:
- Show heap histogram
- Show instance counts for all classes (excluding platform)
This will show you all the "new" instances between different heap dump, and should help you detect where the leak comes from. As follows:
Then you have a magic command line to quickly view the directory, so that you can use it when you need to diagnose memory leaks (but I always forget ).
Two days ago, I saw someone in a group who recommended an app to ask questions. They could answer questions, just like uber Didi took a taxi, generally, this kind of software throws money to give a red envelope. Brother has experience in using uber tickets before! I have tried it several times and I can use it to cash out the registered red envelopes and the money I received before. I have raised more than 50 yuan, and I can use it in visual testing. Ps, but try to ask technical questions, otherwise it will be easily blocked.
If you have any technical skills, you can try it yourself. If you do not, you can ask me 315414695: QQ Group 290551701 has gathered many Internet elites, Technical Directors, architects, and project managers! Open-source technology research, welcome to the industry, Daniel and beginners interested in IT industry personnel!