The blog content is in the Department of the Organization to discuss the operation of the issue when the PPT content, content vitalize, mainly for the convenience of reviewing their own later.
Outline includes: 1, run-time problem Classification 2, server comes with tool 3, other tools 4, example 5, actual situation
Runtime problem classification-Software angle: 1, memory leak, Object not released 2, thread blocking, deadlock 3, Thread dead loop 4, network IO Connection timeout time is too long 5, disk is not writable .....
Runtime problem Classification-Hardware angle: 1, high memory consumption 2, high CPU consumption 3, network unresponsive 4, hard disk space full ....
Linux instructions: 1, top, top-hp PID 2, free 3, DF 4, netstat, NETSTAT-NATP ...
JDK instructions: 1, JPS, Jps-v 2, Jstack, Jstack pid 3, Jmap, jmap-dump:format=b,file=/opt/... 4, Jstat, Jstat-gcutil (gc,gccapacity) pid ....
Tools:
Real-time analysis tools: 1, Jconsole 2, VisualVM 3, Jprofiler 4, javamelody 5, Lambdaprobe ....
Offline analysis tools: 1, Memoryanalyzer tool 2, Thread Dump Analyzer ....
Demo:1, Memory overflow 2, CPU high 3, thread deadlock 4, thread blocking
Ready to work: stack memory settings lower, print GC logs and oom output dump file: Set java_opts=-server-xms24m-xmx50m-xx:permsize=28m-xx:maxpermsize=80m-xx:+ Printgcdetails-xx:+heapdumponoutofmemoryerror-xx:heapdumppath=d:\temp\dump
Memory overflow:
map<string, person> map =NewHashmap<string, person>(); Object[] Array=Newobject[1000000]; for(inti =0; I <1000000; i++) {String d=NewDate (). toString (); Person P=NewPerson (d, I); Map.put (i+" Person", p); Array[i]=p; }
mat-Keywords (personal understanding, not necessarily accurate):
Histogram: number and size of objects in an in-memory class object instance
Dominator Tree: Heap Object trees, object size and occupancy percentage
Leak Suspects:mat analysis of the suspect points of memory leaks
Shallow heap: The object itself occupies memory size
Retained heap: Object itself and referenced objects consume memory size
Merge shortest Paths to GC Roots: from the GC root node to the path view of the object
With outgoing references: external object reference held by object
With incomming references: Which external objects are referenced by the object
....
High CPU consumption:
int i = 0;while (i < 1000000) {i++; System.out.println (i); try {thread.sleep (0);} catch (Interruptedexception e) {//TODO auto-generated catch Blocke.printstacktrace ();}}
Thread Deadlock:
thread T1 = new Thread (new Syncthread (Obj1, Obj2), "T1"); Thread t2 = new Thread (new Syncthread (Obj2, obj1), "T2"), T1.start (), try {thread.sleep (+);} catch ( Interruptedexception e) {//TODO auto-generated catch Blocke.printstacktrace ();} T2.start (); synchronized (obj1) {System.out.println ("Main thread lock on" + Obj1.getname ());}
Private person Obj1;private person obj2;public syncthread (person O1, person O2) {this.obj1 = O1;this.obj2 = O2;} public void Run () {String name = Thread.CurrentThread (). GetName (); SYSTEM.OUT.PRINTLN (name + "acquiring lock on" + Obj1.getname ()) synchronized (obj1) {System.out.println (name + "acquire") D lock on "+ Obj1.getname ()); work (); SYSTEM.OUT.PRINTLN (name + "acquiring lock on" + Obj2.getname ()) synchronized (OBJ2) {System.out.println (name + "acquire") D lock on "+ Obj2.getname ()); work ();} SYSTEM.OUT.PRINTLN (name + "released lock on" + Obj2.getname ());} SYSTEM.OUT.PRINTLN (name + "released lock on" + Obj1.getname ()); SYSTEM.OUT.PRINTLN (name + "finished execution.");} private void work () {try {thread.sleep (10000);} catch (Interruptedexception e) {e.printstacktrace ()}}
Thread Blocking:
Waitthread thread1 = new Waitthread (); Thread1.setname ("Thread 1"); Notifythread thread2 = new Notifythread () thread2.setname ("Thread 2"); Thread1.start (); try {thread.sleep (20000);} catch ( Interruptedexception e) {e.printstacktrace ();} Thread2.start ();
public class Notifythread extends Thread {@Overridepublic void run () {synchronized (requestthreadwait.object) { SYSTEM.OUT.PRINTLN ("Thread" + thread.currentthread (). GetName () + "lock occupied"), try {thread.sleep (20000);} catch ( Interruptedexception e) {//TODO auto-generated catch Blocke.printstacktrace ();} RequestThreadWait.object.notify (); SYSTEM.OUT.PRINTLN ("Thread" + thread.currentthread (). GetName () + "called Object.notify ()"); try {thread.sleep (20000);} catch ( Interruptedexception e) {//TODO auto-generated catch Blocke.printstacktrace ();}} SYSTEM.OUT.PRINTLN ("Thread" + thread.currentthread (). GetName () + "release lock");}} public class Waitthread extends Thread {public void run () {synchronized (requestthreadwait.object) {System.out.println (" Thread "+ thread.currentthread (). GetName () +" Get to lock Start "), try {RequestThreadWait.object.wait ();} catch ( Interruptedexception e) {}system.out.println ("thread" + thread.currentthread (). GetName () + "Get to the end of the lock! ");}}}
Thread State (personal understanding, not necessarily accurate):
Waiting (parking): thread itself hangs wait, normal
Waiting (on object monitor): Thread actively executes wait, waits for resources, if it is its own program, need to pay attention
BLOCKED (on object monitor): Thread blocking, waiting for the other party to release resources, deadlock occurs if a thread waits for each other to block
Timed_waiting (on Object monitor): The thread called Wait (long timeout), waiting at a specific time
Timed_waiting (sleeping): Called Sleeping, sleeps for a period of time
Javamelody:
Lambdaprobe
Actual situation:
User feedback all kinds of strange problems!
Network access is not connected
Web site, Interface access timeout
Specific features are slow
Part of the function is not open.
.......
-
Ping,telnet,traceroute ....
TOP,TOP-HP pid,jstack pid ....
Jstat-gc,gcutil,gccapacity pid ...
jmap-dump:format=b,file=/opt/.... tail, DF-LH ....
NETSTAT-NATP ....
.....
There is no unified solution to production problems, concrete analysis of specific problems
Memory View: Jstat
Thread condition view: top-hp PID
CPU Views: Jstack
Network views: netstat
Actual problem Analysis:
Online View server condition analysis get memory dump get Javacore
Offline analysis tool debugging analysis Memory threads
Code Debug Eclipse Class decompiler (Auto-decompile, select Jd-core, exact number of rows)
...
Reprint Please specify: http://lawson.cnblogs.com
The above is the actual production problem of their own written ppt,copy down, the JDK comes with the tools and instructions are relatively strong, this article is not too much introduction.
Java Runtime problem Diagnostics-Tools Application