рдЬрд╛рд╡рд╛ рдзрд╛рдЧрд╛ рдореЗрд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ

рдЬрдм рдЖрдкрдХрд╛ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди CPU рдХрд╛ 100% рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдпреВрдирд┐рдХреНрд╕ рдФрд░ рдЬреЗрдбреАрдХреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдзрд╛рд░рд╛рдПрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

public class Main { public static void main(String[] args) { new Thread(new Idle(), "Idle").start(); new Thread(new Busy(), "Busy").start(); } } class Idle implements Runnable { @Override public void run() { try { TimeUnit.HOURS.sleep(1); } catch (InterruptedException e) { } } } class Busy implements Runnable { @Override public void run() { while(true) { "Foo".matches("F.*"); } } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдХреЛрдб рдореЗрдВ 2 рдзрд╛рдЧреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рд╣реИрдВред CPU рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (
рдпрд╛рдж рд░рдЦреЗрдВ, рд╕реЛрддреЗ рд╣реБрдП рдзрд╛рдЧреЗ рд╕реНрдореГрддрд┐ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдирд╣реАрдВ), рдЬрдмрдХрд┐ рд╡реНрдпрд╕реНрддрддрд╛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдФрд░ рдЕрдиреНрдп рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдХреЗ рд╕реАрдкреАрдпреВ рдХреЛ рднрд╛рд░реА рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рддреА рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреИрд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдИрдбреА (рдкреАрдЖрдИрдбреА) рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП 'рд╢реАрд░реНрд╖' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
 top -n1 | grep -m1 java 

рд╣рдо "java" рд╢рдмреНрдж рд╡рд╛рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ 'top' рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рджреЗрдЦреЗрдВрдЧреЗ:
 22614 tomek 20 0 1360m 734m 31m S 6 24.3 7:36.59 java 

рдкрд╣рд▓рд╛ рдХреЙрд▓рдо рдкреАрдЖрдИрдбреА тАЛтАЛрд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ 'рд╢реАрд░реНрд╖' рд░рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдПрдирдПрд╕рдЖрдИ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЕрдВрддрддрдГ рдкреАрдЖрдИрдбреА тАЛтАЛрдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓реАред
 top -n1 | grep -m1 java | perl -pe 's/\e\[?.*?[\@-~] ?//g' | cut -f1 -d' ' 

рд░рд┐рдЯрд░реНрди:
 22614 

рдЕрдм рдЬрдм рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд▓рд┐рдирдХреНрд╕ рдереНрд░реЗрдб рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЯреЙрдк-рдПрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -H рд╕реНрд╡рд┐рдЪ рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдм PID рдХреЙрд▓рдо рдереНрд░реЗрдб рдЖрдИрдбреА рд╣реИ:
 top -n1 -H | grep -m1 java top -n1 -H | grep -m1 java | perl -pe 's/\e\[?.*?[\@-~] ?//g' | cut -f1 -d' ' 

рд░рд┐рдЯрд░реНрди:
 25938 tomek 20 0 1360m 748m 31m S 2 24.8 0:15.15 java 25938 

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЗрд╡реАрдПрдо рдкреНрд░реЛрд╕реЗрд╕ рдЖрдИрдбреА рдФрд░ рд▓рд┐рдирдХреНрд╕ рдереНрд░реЗрдб рдЖрдИрдбреА рд╣реИред рдФрд░ рдЕрдм рдордЬрд╝реЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рдЖрдк jstack (JDK рдореЗрдВ рдЙрдкрд▓рдмреНрдз) рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдПрдХ NID рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдирд╛рдо рдХреЗ рдмрд╛рдж рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
 Busy' prio=10 tid=0x7f3bf800 nid=0x6552 runnable [0x7f25c000] java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$Node.study(Pattern.java:3010) 

рдкреИрд░рд╛рдореАрдЯрд░ nid = 0x6552 рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдХрд╛ рд╣реЗрдХреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ:
 printf '%x' 25938 6552 

рдЕрдм рд╕рдм рдХреБрдЫ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:
 #!/bin/bash PID=$(top -n1 | grep -m1 java | perl -pe 's/\e\[?.*?[\@-~] ?//g' | cut -f1 -d' ') NID=$(printf '%x' $(top -n1 -H | grep -m1 java | perl -pe 's/\e\[?.*?[\@-~] ?//g' | cut -f1 -d' ')) jstack $PID | grep -A500 $NID | grep -m1 '^$' -B 500 

рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ PID рдХреЗ рд╕рд╛рде jstack рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХ рдорд┐рд▓рд╛рди NID рдХреЗ рд╕рд╛рде рдПрдХ рдзрд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рд╡рд╣реА рдкреНрд░рд╡рд╛рд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛ред
рд╣рдо рдмрд╛рд╣рд░ рд▓реЗ:
 ./profile.sh "Busy" prio=10 tid=0x7f3bf800 nid=0x6552 runnable [0x7f25c000] java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$Node.study(Pattern.java:3010) at java.util.regex.Pattern$Curly.study(Pattern.java:3854) at java.util.regex.Pattern$CharProperty.study(Pattern.java:3355) at java.util.regex.Pattern$Start.<init>(Pattern.java:3044) at java.util.regex.Pattern.compile(Pattern.java:1480) at java.util.regex.Pattern.<init>(Pattern.java:1133) at java.util.regex.Pattern.compile(Pattern.java:823) at java.util.regex.Pattern.matches(Pattern.java:928) at java.lang.String.matches(String.java:2090) at com.blogspot.nurkiewicz.Busy.run(Main.java:27) at java.lang.Thread.run(Thread.java:662) 


рд╕реНрд░реЛрдд


Source: https://habr.com/ru/post/In153135/


All Articles