linux at java,Linux-Tutorial/Java-bin.md at master · linsanityHuang/Linux-Tutorial · GitHub
Java bin 目錄下的工具
JVM 內(nèi)存結(jié)構(gòu)
運(yùn)行時(shí)數(shù)據(jù)區(qū)(JVM 規(guī)范)
VM 棧(JVM 虛擬機(jī)棧)
是線程私有的,它的生命周期和線程相同。它描述的是 Java 方法執(zhí)行的內(nèi)存模式。
Java 堆區(qū)(Heap)
是 Java 虛擬機(jī)所管理的內(nèi)存中最大的一塊。是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)候創(chuàng)建。用于存放對象實(shí)例。
方法區(qū)(Method Area)
也是各個(gè)線程共享的內(nèi)存區(qū)域,用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。
雖然在 JVM 規(guī)范上是描述為堆的一個(gè)邏輯部分,但是它有一個(gè)別名:Non-Heap(非堆),獨(dú)立于堆區(qū)之外的。JDK8 它是:Metaspace 區(qū)
Metaspace:主要存放:Class、Package、Method、Field、字節(jié)碼、常量池、符號引用等等
方法區(qū)里面有一個(gè):運(yùn)行時(shí)常量池(Run-Time Constant Pool),用于存放編譯期生成的各種字面量和符號應(yīng)用,在類加載后進(jìn)入該池存放。
本地方法棧(Native Method Stacks)
與虛擬機(jī)棧所發(fā)揮的作用類似,之間的區(qū)別:
虛擬機(jī)棧是為虛擬機(jī)執(zhí)行 Java 方法(也就是字節(jié)碼)服務(wù)
本地方法棧是為了虛擬機(jī)使用到 Native 方法服務(wù)。
JDK8 真實(shí)內(nèi)存結(jié)構(gòu)(HotSpot)
HotSpot--Java HotSpot Performance Engine,是 Java 虛擬機(jī)的一個(gè)實(shí)現(xiàn),目前是 Oracle 在維護(hù)和發(fā)布。
JDK8 HotSpot 的堆內(nèi)存區(qū)域結(jié)構(gòu)
組成:Eden + Surviver(S0 + S1) + Old
對象生命周期:Eden > Surviver(S0 + S1) > Old
Eden:該區(qū)域是最主要的剛創(chuàng)建的對象的內(nèi)存分配區(qū)域,絕大多數(shù)對象都會(huì)被創(chuàng)建到這里(除了部分大對象通過內(nèi)存擔(dān)保機(jī)制創(chuàng)建到Old區(qū)域,默認(rèn)大對象都是能夠存活較長時(shí)間的),該區(qū)域的對象大部分都是短時(shí)間都會(huì)死亡的,故垃圾回收器針對該部分主要采用標(biāo)記整理算法了回收該區(qū)域。
Surviver:該區(qū)域也是屬于新生代的區(qū)域,該區(qū)域是將在Eden中未被清理的對象存放到該區(qū)域中,該區(qū)域分為兩塊區(qū)域,采用的是復(fù)制算法,每次只使用一塊,Eden與Surviver區(qū)域的比例是8:1,是根據(jù)大量的業(yè)務(wù)運(yùn)行總結(jié)出來的規(guī)律。
Old:該區(qū)域是屬于老年代,一般能夠在Surviver中沒有被清除出去的對象才會(huì)進(jìn)入到這塊區(qū)域,該區(qū)域主要是采用標(biāo)記清除算法。
總結(jié):java堆的垃圾回收是垃圾回收器最主要的光顧對象,整體采用分代收集的策略,對不同區(qū)域結(jié)合其特點(diǎn)采用不同的垃圾收集算法。我們在編程中也應(yīng)該關(guān)注這一塊區(qū)域,盡量不適用大對象,盡可能的創(chuàng)建局部對象,使用過后確定廢棄不用的對象及時(shí)斷開引用,盡量避免使用循環(huán)的對象引用(可達(dá)性分析也是比較消耗資源的)等等。
JVM內(nèi)存區(qū)域的詳解圖
更多這類文章
頻繁GC問題或內(nèi)存溢出排查流程
使用 jps,查看線程ID,假設(shè) PID 為 12011
使用 jstat -gc PID 250 20,查看gc情況,一般比較關(guān)注PERM區(qū)的情況,查看GC的增長情況。
使用 jstat -gccause PID:額外輸出上次GC原因
使用 jmap -dump:format=b,file=/opt/myHeapDumpFileName 12011,生成堆轉(zhuǎn)儲(chǔ)文件
使用 jhat 或者可視化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情況。
結(jié)合代碼解決內(nèi)存溢出或泄露問題。
死鎖問題
使用 jps查看線程ID,假設(shè) PID 為 12011
使用 jstack 12011 查看線程情況
jps
顯示當(dāng)前所有 java 進(jìn)程 pid 的命令
16470 Jps
12011 Bootstrap
jps -v 跟:ps -ef|grep java 主要輸出內(nèi)容一樣
12011 是我這邊的一個(gè) java 應(yīng)用的 pid,下面的其他命令都是自己與此應(yīng)用進(jìn)行分析的
jstat(重要)
顯示進(jìn)程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運(yùn)行數(shù)據(jù)。
查看類加載信息:jstat -class PID
垃圾回收統(tǒng)計(jì)
jstat -gc PID 250 10,每250毫秒查詢一次,一共查詢10次。
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
34944.0 34944.0 1006.5 0.0 279616.0 235729.8 699072.0 12407.5 20736.0 20145.5 2560.0 2411.8 6 0.392 0 0.000 0.392
列含義說明:
**34944.0 表示 34M 大小,235729.8 表示 235M **
SO + S1 + Eden = young 區(qū)
-S0C 年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
-S1C 年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
-S0U 年輕代中第一個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié)) (字母 U 表示 used)
-S1U 年輕代中第二個(gè)survivor(幸存區(qū))目前已使用空間 (字節(jié)) (字母 U 表示 used)
-EC 年輕代中Eden(伊甸園)的容量 (字節(jié))
-EU 年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
OC + OU = old 區(qū)
-OC Old代的容量 (字節(jié))
-OU Old代目前已使用空間 (字節(jié))
MC + MU = Metaspace 區(qū)
MC 方法區(qū)大小
MU 方法區(qū)使用大小
其他
CCSC 壓縮類空間大小
CCSU 壓縮類空間使用大小
YGC 年輕代垃圾回收次數(shù)
YGCT 年輕代垃圾回收消耗時(shí)間
FGC 老年代垃圾回收次數(shù)
FGCT 老年代垃圾回收消耗時(shí)間
GCT 垃圾回收消耗總時(shí)間
堆內(nèi)存統(tǒng)計(jì)
jstat -gccapacity 12011 250 10,查詢進(jìn)程 12011 VM內(nèi)存中三代(young,old,perm)對象的使用和占用大小,每250毫秒查詢一次,一共查詢10次。
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
349504.0 1398080.0 349504.0 34944.0 34944.0 279616.0 699072.0 2796224.0 699072.0 699072.0 0.0 1067008.0 20736.0 0.0 1048576.0 2560.0 6 0
列含義說明:
NGCMN 年輕代(young)中初始化(最小)的大小(字節(jié))
NGCMX 年輕代(young)的最大容量 (字節(jié))
NGC 年輕代(young)中當(dāng)前的容量 (字節(jié))
S0C 年輕代中第一個(gè)survivor(幸存區(qū))的容量 (字節(jié))
S1C 年輕代中第二個(gè)survivor(幸存區(qū))的容量 (字節(jié))
EC 年輕代中Eden(伊甸園)的容量 (字節(jié))
OGCMN old代中初始化(最小)的大小 (字節(jié))
OGCMX old代的最大容量(字節(jié))
OGC old代當(dāng)前新生成的容量 (字節(jié))
OC Old代的容量 (字節(jié))
MCMN 最小元數(shù)據(jù)容量
MCMX 最大元數(shù)據(jù)容量
MC 當(dāng)前元數(shù)據(jù)空間大小
CCSMN 最小壓縮類空間大小
CCSMX 最大壓縮類空間大小
CCSC 當(dāng)前壓縮類空間大小
YGC 年輕代gc次數(shù),從應(yīng)用程序啟動(dòng)到采樣時(shí)年輕代中g(shù)c次數(shù)
FGC 老年代GC次數(shù),從應(yīng)用程序啟動(dòng)到采樣時(shí)old代(全gc = Full gc次數(shù))gc次數(shù)
gcutil
使用:jstat -gcutil PID 3000 10:
正常情況結(jié)果應(yīng)該是這樣的:
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 67.63 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.68 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.68 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.68 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.68 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.68 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.68 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.68 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.71 38.09 78.03 68.82 124 0.966 5 0.778 1.744
0.00 0.00 67.71 38.09 78.03 68.82 124 0.966 5 0.778 1.744
S0:SO 當(dāng)前使用比例
S1:S1 當(dāng)前使用比例
E:Eden 區(qū)使用比例(百分比)(異常的時(shí)候,這里可能會(huì)接近 100%)
O:old 區(qū)使用比例(百分比)(異常的時(shí)候,這里可能會(huì)接近 100%)
M:Metaspace 區(qū)使用比例(百分比)(異常的時(shí)候,這里可能會(huì)接近 100%)
CCS:壓縮使用比例
YGC:年輕代垃圾回收次數(shù)
FGC:老年代垃圾回收次數(shù)
FGCT:老年代垃圾回收消耗時(shí)間(Full gc耗時(shí))(單位秒)
GCT:垃圾回收消耗總時(shí)間(單位秒)
異常的時(shí)候每次 Full GC 時(shí)間也可能非常長,每次時(shí)間計(jì)算公式=FGCT值/FGC指)
在 YGC 之前 年輕代 = eden + S1;YGC 之后,年輕代 = eden + S0。
如果看到 YGC 之后 old 區(qū)空間沒變,表示此次 YGC,沒有對象晉升到 old 區(qū)
jmap
生成堆轉(zhuǎn)儲(chǔ)快照(heap dump)
heap dump 主要記錄了在某一時(shí)刻JVM堆中對象使用的情況,即某個(gè)時(shí)刻JVM堆的快照,是一個(gè)二進(jìn)制文件,主要用于分析哪些對象占用了太對的堆空間,從而發(fā)現(xiàn)導(dǎo)致內(nèi)存泄漏的對象。
堆Dump是反應(yīng)Java堆使用情況的內(nèi)存鏡像,其中主要包括系統(tǒng)信息、虛擬機(jī)屬性、完整的線程Dump、所有類和對象的狀態(tài)等。 一般,在內(nèi)存不足、GC異常等情況下,我們就會(huì)懷疑有內(nèi)存泄露。這個(gè)時(shí)候我們就可以制作堆Dump來查看具體情況,分析原因。
常見內(nèi)存錯(cuò)誤:
outOfMemoryError 年老代內(nèi)存不足。
outOfMemoryError:PermGen Space 永久代內(nèi)存不足。
outOfMemoryError:GC overhead limit exceed 垃圾回收時(shí)間占用系統(tǒng)運(yùn)行時(shí)間的98%或以上。
jmap -heap 12011,查看指定進(jìn)程堆(heap)使用情況
Attaching to process ID 12011, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.151-b12
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 4294967296 (4096.0MB)
NewSize = 357892096 (341.3125MB)
MaxNewSize = 1431633920 (1365.3125MB)
OldSize = 715849728 (682.6875MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 322109440 (307.1875MB)
used = 242418024 (231.1878433227539MB)
free = 79691416 (75.9996566772461MB)
75.2595217327378% used
Eden Space:
capacity = 286326784 (273.0625MB)
used = 241387328 (230.20489501953125MB)
free = 44939456 (42.85760498046875MB)
84.30483681191348% used
From Space:
capacity = 35782656 (34.125MB)
used = 1030696 (0.9829483032226562MB)
free = 34751960 (33.142051696777344MB)
2.88043458819826% used
To Space:
capacity = 35782656 (34.125MB)
used = 0 (0.0MB)
free = 35782656 (34.125MB)
0.0% used
tenured generation:
capacity = 715849728 (682.6875MB)
used = 12705280 (12.11669921875MB)
free = 703144448 (670.57080078125MB)
1.774852947908084% used
7067 interned Strings occupying 596016 bytes.
jmap -histo 12011,查看堆內(nèi)存(histogram)中的對象數(shù)量及大小(下面 demo 內(nèi)容太多,所以選取其中一部分)
jmap -histo:live 12011,查看堆內(nèi)存(histogram)中的對象數(shù)量及大小,但是JVM會(huì)先觸發(fā)gc,然后再統(tǒng)計(jì)信息
jmap -dump:format=b,file=/opt/myHeapDumpFileName 12011,將內(nèi)存使用的詳細(xì)情況輸出到文件,之后一般使用其他工具進(jìn)行分析。
生成的文件可以用一些可視化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)來查看
編號 個(gè)數(shù) 字節(jié) 類名
508: 6 192 java.lang.invoke.LambdaForm$BasicType
509: 8 192 java.lang.invoke.MethodHandleImpl$Intrinsic
510: 8 192 java.math.RoundingMode
511: 6 192 java.net.NetworkInterface$1checkedAddresses
512: 6 192 java.rmi.server.UID
513: 3 192 java.text.DateFormatSymbols
514: 8 192 java.util.Formatter$FixedString
515: 6 192 java.util.TreeMap$KeyIterator
516: 8 192 java.util.regex.Pattern$Slice
517: 8 192 jdk.net.SocketFlow$Status
518: 6 192 net.sf.ehcache.DefaultElementEvictionData
519: 3 192 net.sf.ehcache.store.chm.SelectableConcurrentHashMap
520: 8 192 org.apache.logging.log4j.Level
521: 8 192 org.apache.logging.log4j.core.appender.rolling.RolloverFrequency
522: 4 192 org.apache.logging.log4j.core.impl.ThrowableProxy
523: 3 192 org.apache.logging.log4j.core.layout.PatternLayout
524: 12 192 org.apache.logging.log4j.core.util.datetime.FastDateParser$NumberStrategy
525: 3 192 org.apache.logging.log4j.core.util.datetime.FixedDateFormat
526: 8 192 org.apache.logging.log4j.spi.StandardLevel
527: 2 192 sun.nio.ch.ServerSocketChannelImpl
528: 4 192 sun.nio.cs.StreamEncoder
529: 6 192 sun.reflect.generics.reflectiveObjects.TypeVariableImpl
530: 11 176 java.text.NumberFormat$Field
531: 11 176 java.util.concurrent.ConcurrentSkipListSet
532: 2 176 javax.management.remote.rmi.NoCallStackClassLoader
533: 11 176 org.apache.logging.log4j.core.lookup.MapLookup
534: 8 168 [Ljava.lang.reflect.TypeVariable;
535: 1 168 [[Ljava.math.BigInteger;
jstack(線程快照 -- CPU 負(fù)載高)
jstack命令主要用來查看Java線程的調(diào)用堆棧的,可以用來分析線程問題(如死鎖)
jstack用于生成java虛擬機(jī)當(dāng)前時(shí)刻的 線程快照(thread dump)。主要記錄JVM在某一時(shí)刻各個(gè)線程執(zhí)行的情況,以棧的形式顯示,是一個(gè)文本文件。
線程快照是當(dāng)前java虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現(xiàn)長時(shí)間停頓的原因,如線程間死鎖、死循環(huán)、請求外部資源導(dǎo)致的長時(shí)間等待等。
線程出現(xiàn)停頓的時(shí)候通過jstack來查看各個(gè)線程的調(diào)用堆棧,就可以知道沒有響應(yīng)的線程到底在后臺(tái)做什么事情,或者等待什么資源。
如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問題。
另外,jstack工具還可以附屬到正在運(yùn)行的java程序中,看到當(dāng)時(shí)運(yùn)行的java程序的java stack和native stack的信息, 如果現(xiàn)在運(yùn)行的java程序呈現(xiàn)hung的狀態(tài),jstack是非常有用的。
jstack 12011,查看線程情況
jstack -l 12011,除堆棧外,顯示關(guān)于鎖的附件信息
導(dǎo)出文件:jstack -l PID >> /opt/jstack-tomcat1-20180917.log
把占用 CPU 資源高的線程十進(jìn)制的 PID 轉(zhuǎn)換成 16 進(jìn)制:printf "%x\n" PID,比如:printf "%x\n" 12401 得到結(jié)果是:3071
在剛剛輸出的那個(gè) log 文件中搜索:3071,可以找到:nid=0x3071
在線看某個(gè)線程 PID 的情況:jstack 進(jìn)程ID | grep 十六進(jìn)制線程ID -A 10
-A 10 參數(shù)用來指定顯示行數(shù),否則只會(huì)顯示一行信息
下面 demo 內(nèi)容太多,所以選取其中一部分結(jié)構(gòu):
常見線程狀態(tài)
Runnable:正在運(yùn)行的線程
Sleeping:休眠的線程
Waiting:等待的線程
2018-03-08 14:28:13
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.151-b12 mixed mode):
"Attach Listener" #53 daemon prio=9 os_prio=0 tid=0x00007f8a34009000 nid=0x865 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Log4j2-AsyncLoggerConfig-1" #16 daemon prio=5 os_prio=0 tid=0x00007f8a5c48d800 nid=0x2f0c waiting on condition [0x00007f8a4cbfe000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000007155e4850> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at com.lmax.disruptor.BlockingWaitStrategy.waitFor(BlockingWaitStrategy.java:45)
at com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:56)
at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:124)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Wrapper-Control-Event-Monitor" #13 daemon prio=5 os_prio=0 tid=0x00007f8a5c34e000 nid=0x2efc waiting on condition [0x00007f8a60314000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.tanukisoftware.wrapper.WrapperManager$3.run(WrapperManager.java:731)
"RMI TCP Accept-0" #11 daemon prio=5 os_prio=0 tid=0x00007f8a5c32f800 nid=0x2efa runnable [0x00007f8a60619000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)
at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:400)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:372)
at java.lang.Thread.run(Thread.java:748)
"Service Thread" #7 daemon prio=9 os_prio=0 tid=0x00007f8a5c0b4800 nid=0x2ef3 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007f8a5c0b1800 nid=0x2ef2 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007f8a5c0af800 nid=0x2ef1 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007f8a5c0aa800 nid=0x2ef0 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f8a5c07b000 nid=0x2eef in Object.wait() [0x00007f8a614f4000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007155e5ba8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000007155e5ba8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
"VM Thread" os_prio=0 tid=0x00007f8a5c06e800 nid=0x2eed runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007f8a5c332000 nid=0x2efb waiting on condition
JNI global references: 281
資料
總結(jié)
以上是生活随笔為你收集整理的linux at java,Linux-Tutorial/Java-bin.md at master · linsanityHuang/Linux-Tutorial · GitHub的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux http 分析工具,技术|h
- 下一篇: linux mint 用户管理,Linu