亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

通過jstack分析解決進程死鎖問題實例代碼

2024-07-13 10:15:47
字體:
來源:轉載
供稿:網友

剛才用jstack解決了一個進程死鎖的問題——其實早就解決了,也知道原因,只是一直沒找到死鎖的位置,不太甘心而已。

流程大致如下:

(0)環境要求,JDK1.6及以上

(1)先找到進程的PID,Windows下,打開進程管理器,按照名字排序,可以找到叫做javaw.exe的進程(java虛擬機進程一律叫做javaw.exe),要找出哪個是你的進程,記住當前進程列表,然后重啟你的進程,PID刷新過的那個即是你的進程。

(2)在CMD下運行:jstack pid,jstack會在console上打出一系列信息

(3)分析上述信息

實例:

我這個問題的的jstack信息如下:

C:/Documents and Settings/user>jstack 66522012-06-07 21:32:02Full thread dump Java HotSpot(TM) Client VM (16.3-b01 mixed mode, sharing):"Thread-1" daemon prio=6 tid=0x03010c00 nid=0xcdc waiting for monitor entry [0x0339f000]  java.lang.Thread.State: BLOCKED (on object monitor)    at org.apache.commons.net.telnet.TelnetInputStream.__read(TelnetInputStream.java:122)    - waiting to lock <0x22942280> (a org.apache.commons.net.ftp.FTPClient)    at org.apache.commons.net.telnet.TelnetInputStream.run(TelnetInputStream.java:535)    at java.lang.Thread.run(Thread.java:619)"Framework Event Dispatcher" daemon prio=6 tid=0x03010400 nid=0x998 in Object.wait() [0x0334f000]  java.lang.Thread.State: WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x228fa800> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)    at java.lang.Object.wait(Object.java:485)    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)    - locked <0x228fa800> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336)"Start Level Event Dispatcher" daemon prio=6 tid=0x02fcf400 nid=0x2638 in Object.wait() [0x032de000]  java.lang.Thread.State: WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x2295db48> (a [I)    at java.lang.Object.wait(Object.java:485)    at org.apache.commons.net.telnet.TelnetInputStream.read(TelnetInputStream.java:339)    - locked <0x2295db48> (a [I)    at org.apache.commons.net.telnet.TelnetInputStream.read(TelnetInputStream.java:466)    at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)    at java.io.BufferedInputStream.read(BufferedInputStream.java:317)    - locked <0x2295fe18> (a java.io.BufferedInputStream)    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)    - locked <0x22961f88> (a java.io.InputStreamReader)    at java.io.InputStreamReader.read(InputStreamReader.java:167)    at java.io.BufferedReader.fill(BufferedReader.java:136)    at java.io.BufferedReader.readLine(BufferedReader.java:299)    - locked <0x22961f88> (a java.io.InputStreamReader)    at java.io.BufferedReader.readLine(BufferedReader.java:362)    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:264)    at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:335)    at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:550)    at org.apache.commons.net.SocketClient.connect(SocketClient.java:163)    at com.mycompany.dc.ftp.client.FTPClientImpl.connect(FTPClientImpl.java:75)    - locked <0x22942280> (a org.apache.commons.net.ftp.FTPClient)    at com.mycompany.dc.ftp.client.FTPClientFactoryImpl.getClient(FTPClientFactoryImpl.java:35)    - locked <0x228f9310> (a java.lang.Object)    at ftpclienttest.Activator.start(Activator.java:43)    at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)    at java.security.AccessController.doPrivileged(Native Method)    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)    at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)    at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1131)    at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)    at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)    at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)    at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)    - locked <0x27e68d70> (a java.lang.Object)    at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)    at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)"Framework Active Thread" prio=6 tid=0x02ff1800 nid=0x1fbc in Object.wait() [0x0328f000]  java.lang.Thread.State: TIMED_WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x27e65770> (a org.eclipse.osgi.framework.internal.core.Framework)    at org.eclipse.osgi.framework.internal.core.Framework.run(Framework.java:1817)    - locked <0x27e65770> (a org.eclipse.osgi.framework.internal.core.Framework)    at java.lang.Thread.run(Thread.java:619)"OSGi Console" prio=6 tid=0x03005400 nid=0x225c waiting on condition [0x0323f000]  java.lang.Thread.State: TIMED_WAITING (sleeping)    at java.lang.Thread.sleep(Native Method)    at org.eclipse.osgi.framework.internal.core.FrameworkConsole.runConsole(FrameworkConsole.java:125)    at org.eclipse.osgi.framework.internal.core.FrameworkConsole.run(FrameworkConsole.java:104)    at java.lang.Thread.run(Thread.java:619)"Low Memory Detector" daemon prio=6 tid=0x02c09800 nid=0x1d68 runnable [0x00000000]  java.lang.Thread.State: RUNNABLE"CompilerThread0" daemon prio=10 tid=0x02c03000 nid=0x24c4 waiting on condition[0x00000000]  java.lang.Thread.State: RUNNABLE"Attach Listener" daemon prio=10 tid=0x02c01800 nid=0x1138 waiting on condition[0x00000000]  java.lang.Thread.State: RUNNABLE"Signal Dispatcher" daemon prio=10 tid=0x02c20c00 nid=0x18ac runnable [0x00000000]  java.lang.Thread.State: RUNNABLE"Finalizer" daemon prio=8 tid=0x02bc0400 nid=0x11ac in Object.wait() [0x02d8f000]  java.lang.Thread.State: WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x27d5e5c8> (a java.lang.ref.ReferenceQueue$Lock)    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)    - locked <0x27d5e5c8> (a java.lang.ref.ReferenceQueue$Lock)    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)"Reference Handler" daemon prio=10 tid=0x02bbb800 nid=0x9cc in Object.wait() [0x02d3f000]  java.lang.Thread.State: WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x27d5e650> (a java.lang.ref.Reference$Lock)    at java.lang.Object.wait(Object.java:485)    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)    - locked <0x27d5e650> (a java.lang.ref.Reference$Lock)"main" prio=6 tid=0x008a6c00 nid=0x22ec in Object.wait() [0x0098f000]  java.lang.Thread.State: TIMED_WAITING (on object monitor)    at java.lang.Object.wait(Native Method)    - waiting on <0x22c303c8> (a org.eclipse.core.runtime.internal.adaptor.Semaphore)    at org.eclipse.core.runtime.internal.adaptor.Semaphore.acquire(Semaphore.java:55)    - locked <0x22c303c8> (a org.eclipse.core.runtime.internal.adaptor.Semaphore)    at org.eclipse.core.runtime.adaptor.EclipseStarter.updateSplash(EclipseStarter.java:1251)    at org.eclipse.core.runtime.adaptor.EclipseStarter.setStartLevel(EclipseStarter.java:1213)    at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:288)    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:175)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)    at java.lang.reflect.Method.invoke(Method.java:597)    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)    at org.eclipse.equinox.launcher.Main.run(Main.java:1410)    at org.eclipse.equinox.launcher.Main.main(Main.java:1386)"VM Thread" prio=10 tid=0x02bba000 nid=0xdb4 runnable"VM Periodic Task Thread" prio=10 tid=0x02c0e400 nid=0x24ac waiting on conditionJNI global references: 677

分析:

根據提示,有兩個線程都用到了ftpClient這個對象作為鎖,而且前一個得到鎖的要等待后一個需要這個鎖的返回結果,造成死鎖。這兩處分別為:

(1) at org.apache.commons.net.telnet.TelnetInputStream.__read(TelnetInputStr

eam.java:122)

(2) - locked <0x22942280> (a org.apache.commons.net.ftp.FTPClient)

at com.sagemcom.dc.ftp.client.FTPClientFactoryImpl.getClient(FTPClientFa

ctoryImpl.java:35)

- locked <0x228f9310> (a java.lang.Object)

前者是系統自己用的鎖,后者是我代碼里面加的。自己代碼里面換一個對象做鎖就解決了。

總結

jstack在解決問題上還是比較有幫助的,信息簡潔有效,其實有很多圖形化的分析工具是基于它的。但jstack需要jdk1.6以上的版本才支持。

以上就是本文關于通過jstack分析解決進程死鎖問題實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频播放| 操日韩av在线电影| 国产精品一区二区三区成人| 久久天天躁夜夜躁狠狠躁2022| 美乳少妇欧美精品| 国产精品久久久一区| 精品国模在线视频| 九九热精品视频国产| 亚洲第一页中文字幕| 国产999精品久久久影片官网| 国产69久久精品成人看| 久久中文字幕国产| 久久av红桃一区二区小说| 欧美成aaa人片免费看| 亚洲女人被黑人巨大进入| 亚洲人成电影在线播放| 日韩亚洲第一页| 精品国产成人在线| 国产视频久久久久久久| 日产日韩在线亚洲欧美| 97视频在线观看网址| 亚洲最大福利视频网站| 九九热精品在线| 国产精品www色诱视频| 久久久极品av| 国内精品久久久久久久久| 国产精品成人一区二区| 欧美香蕉大胸在线视频观看| 国产精品视频精品| 91在线中文字幕| 91精品国产综合久久香蕉922| 日韩黄色在线免费观看| 狠狠爱在线视频一区| 欧美黄色片在线观看| 久久精品小视频| 成人h片在线播放免费网站| 亚洲精品电影网在线观看| 久热爱精品视频线路一| 色悠悠久久久久| 在线亚洲欧美视频| 亚洲精品欧美日韩| 欧美午夜激情小视频| 视频在线一区二区| 在线视频欧美日韩| 亚洲国产天堂久久国产91| 欧美日韩在线免费观看| 国内精品国产三级国产在线专| 久久九九亚洲综合| 欧美日韩中文字幕| 7777精品久久久久久| 欧美不卡视频一区发布| 欧美精品videofree1080p| 久久久国产视频91| 97av在线视频免费播放| 国产成人一区二区三区小说| 亚洲综合日韩在线| 国产精品夜色7777狼人| 日韩欧美国产黄色| 国产乱肥老妇国产一区二| 日韩久久免费电影| 性视频1819p久久| 亚洲福利视频专区| 精品国产乱码久久久久久天美| 久久久久久香蕉网| 精品国产乱码久久久久久婷婷| 国产成人精品久久| 92看片淫黄大片欧美看国产片| 97免费在线视频| 日韩亚洲精品电影| 国产成人极品视频| 久久久久久成人精品| 91av福利视频| 26uuu久久噜噜噜噜| 91影院在线免费观看视频| 久久精品国产亚洲7777| 久久免费观看视频| 国产精品高潮呻吟久久av野狼| 日本sm极度另类视频| 欧美成人午夜激情| 91视频88av| 国产免费一区二区三区香蕉精| 亚洲精品狠狠操| 国产精品va在线播放我和闺蜜| 欧美精品在线播放| 久久精品久久久久久| 日韩不卡在线观看| 亚洲精品乱码久久久久久金桔影视| 国产精品久久久久久久久久久久| 日韩专区在线播放| 欧美激情影音先锋| 欧美大全免费观看电视剧大泉洋| 久久男人资源视频| 日韩hd视频在线观看| 中文.日本.精品| 国产成人精品在线观看| 亚洲欧美国产另类| 国产精品一区av| 日本精品视频网站| 国产欧美va欧美va香蕉在| 亚洲性日韩精品一区二区| 国产精品第一页在线| 欧美激情一区二区三区高清视频| 精品在线欧美视频| 国产精品一区二区三区在线播放| 亚洲男人第一av网站| 国内精品久久久久久| 亚洲午夜av电影| 美女999久久久精品视频| 日韩免费黄色av| 国产精品露脸自拍| 日韩电影在线观看永久视频免费网站| 亚洲国产精品视频在线观看| 最好看的2019的中文字幕视频| 日本亚洲精品在线观看| 97久久精品在线| 久久精品亚洲热| 国产精品久久在线观看| 亚洲精品成人久久电影| 国产成人欧美在线观看| 国内精品美女av在线播放| 欧美激情视频一区二区三区不卡| 中文字幕亚洲字幕| 欧美另类69精品久久久久9999| 欧美最猛性xxxxx(亚洲精品)| 92福利视频午夜1000合集在线观看| 欧美在线观看网站| 欧美亚洲国产另类| 日韩在线免费高清视频| 国产成人黄色av| 亚洲综合自拍一区| 亚洲精品国产精品国自产观看浪潮| 亚洲精品视频二区| 亚洲精品一区在线观看香蕉| 亚洲精品美女在线| 高清欧美性猛交xxxx黑人猛交| 久久国产视频网站| 国产精品久久久久久久久久久久久久| 久久成人一区二区| 国产精品久久久久影院日本| 亚洲第一页自拍| 97人洗澡人人免费公开视频碰碰碰| 91精品在线观看视频| 青青草原成人在线视频| 2019亚洲男人天堂| 午夜精品久久久久久久99黑人| 亚洲片在线观看| 国产精品视频午夜| 国产精品丝袜白浆摸在线| 亚洲第一级黄色片| 久久99精品久久久久久琪琪| 亚洲三级黄色在线观看| 日韩天堂在线视频| 日韩美女视频在线观看| 国产精品96久久久久久又黄又硬| 俺去了亚洲欧美日韩| 亚洲免费人成在线视频观看| 国产精品久久久久久久7电影| 亚洲综合大片69999| 美女视频久久黄| 色天天综合狠狠色| 亚洲一区久久久| 日韩欧美国产网站| 国产视频精品一区二区三区| 91伊人影院在线播放|