亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦硬件知識 > CPU知識 > Java進(jìn)程占用CPU高怎么解決

      Java進(jìn)程占用CPU高怎么解決

      時(shí)間: 沈迪豪908 分享

      Java進(jìn)程占用CPU高怎么解決

        Java進(jìn)程占用CPU高怎么辦?跟著學(xué)習(xí)啦小編一起學(xué)習(xí)Java進(jìn)程占用CPU高的解決方法吧。

        Java進(jìn)程占用CPU高的解決方法

        故障分析

        在故障發(fā)生時(shí),WebLogic的被管服務(wù)器mserver2的gc日志出現(xiàn)連續(xù)FULL GC現(xiàn)象,如下所示:

        68354.936: [Full GC 68354.936: [Tenured: 1441791K->1441791K(1441792K), 50.8704538 secs] 1823487K->1793402K(1823488K), [Perm : 122693K->122655K(131072K)], 50.8707784 secs]

        68406.966: [Full GC 68406.966: [Tenured: 1441791K->1441791K(1441792K), 43.3959313 secs] 1823487K->1795107K(1823488K), [Perm : 122691K->122691K(131072K)], 43.3962451 secs]

        68452.057: [Full GC 68452.057: [Tenured: 1441791K->1441791K(1441792K), 43.8102222 secs] 1823487K->1793985K(1823488K), [Perm : 122692K->122692K(131072K)], 43.8105214 secs]

        68497.417: [Full GC 68497.417: [Tenured: 1441791K->1441791K(1441792K), 44.0541711 secs] 1823487K->1791516K(1823488K), [Perm : 122692K->122692K(131072K)], 44.0545032 secs]

        68542.904: [Full GC 68542.904: [Tenured: 1441791K->1441791K(1441792K), 51.2142139 secs] 1823478K->1792950K(1823488K), [Perm : 122709K->122681K(131072K)], 51.2145271 secs]

        由此,判斷有大量對象占用了JVM的內(nèi)存,并且在GC后沒有釋放。

        同時(shí),實(shí)例的輸出日志中,發(fā)現(xiàn)有session復(fù)制現(xiàn)象,如下所示:

        這說明,WebLogic的被管服務(wù)器mserver2在向mserver1復(fù)制會(huì)話。

        由于mserver1無法處理兩個(gè)被管服務(wù)器的業(yè)務(wù),很快也訪問緩慢了。

        之后,重啟了WebLogic的2個(gè)實(shí)例,系統(tǒng)恢復(fù)正常。

        在接下來的系統(tǒng)監(jiān)控中,發(fā)現(xiàn)WebLogic其中一個(gè)實(shí)例的JAVA進(jìn)程的CPU使用率依然非常高,針對這一現(xiàn)象,我們dump出CPU的使用情況,發(fā)現(xiàn)有些JAVA線程使用CPU資源較高,且占用時(shí)間較長,如下所示:

        PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID

        27662 cncbss 2225M 1631M cpu10 0 10 0:22.46 22% java/73

        27662 cncbss 2225M 1631M cpu9 0 10 0:20.31 22% java/72

        27662 cncbss 2225M 1631M run 0 10 0:22.12 22% java/75

        經(jīng)過多次dump CPU使用情況,這三個(gè)線程仍然存在。

        此后dump WebLogic的線程,發(fā)現(xiàn)是如下線程導(dǎo)致高消耗CPU:

        "ExecuteThread: '51' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0x00ef7008 nid=0x4a runnable [0x79480000..0x79481998]

        at java.util.Vector.indexOf(Vector.java:363)

        - waiting to lock <0xa21b73f8> (a java.util.Vector)

        at java.util.Vector.contains(Vector.java:321)

        at cnc.util.FyCol.add(FyCol.java:204)

        at cnc.util.FyCol.add(FyCol.java:194)

        at cnc.util.RecordSet.(RecordSet.java:199)

        at cnc.util.RecordSet.(RecordSet.java:93)

        at cnc.util.FyDao.query(FyDao.java:264)

        at cnc.util.FyDao.query(FyDao.java:234)

        at listquery.ListQueryBean.getfreeList(ListQueryBean.java:404)

        at listquery.ListQuery_gq76y8_EOImpl.getfreeList(ListQuery_gq76y8_EOImpl.java:98)

        at listquery.ListQuery_gq76y8_EOImpl_WLSkel.invoke(Unknown Source)

        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:166)

        at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:290)

        at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:248)

        at listquery.ListQuery_gq76y8_EOImpl_816_WLStub.getfreeList(Unknown Source)

        at cnc.query.list.QueryList.createExcel(QueryList.java:790)

        at cnc.query.list.ExportData.processRequest(ExportData.java:39)

        at cnc.query.list.ExportData.probe

      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦硬件知識 > CPU知識 > Java進(jìn)程占用CPU高怎么解決

      Java進(jìn)程占用CPU高怎么解決

      時(shí)間: 沈迪豪908 分享

      Java進(jìn)程占用CPU高怎么解決

        Java進(jìn)程占用CPU高怎么辦?跟著學(xué)習(xí)啦小編一起學(xué)習(xí)Java進(jìn)程占用CPU高的解決方法吧。

        Java進(jìn)程占用CPU高的解決方法

        故障分析

        在故障發(fā)生時(shí),WebLogic的被管服務(wù)器mserver2的gc日志出現(xiàn)連續(xù)FULL GC現(xiàn)象,如下所示:

        68354.936: [Full GC 68354.936: [Tenured: 1441791K->1441791K(1441792K), 50.8704538 secs] 1823487K->1793402K(1823488K), [Perm : 122693K->122655K(131072K)], 50.8707784 secs]

        68406.966: [Full GC 68406.966: [Tenured: 1441791K->1441791K(1441792K), 43.3959313 secs] 1823487K->1795107K(1823488K), [Perm : 122691K->122691K(131072K)], 43.3962451 secs]

        68452.057: [Full GC 68452.057: [Tenured: 1441791K->1441791K(1441792K), 43.8102222 secs] 1823487K->1793985K(1823488K), [Perm : 122692K->122692K(131072K)], 43.8105214 secs]

        68497.417: [Full GC 68497.417: [Tenured: 1441791K->1441791K(1441792K), 44.0541711 secs] 1823487K->1791516K(1823488K), [Perm : 122692K->122692K(131072K)], 44.0545032 secs]

        68542.904: [Full GC 68542.904: [Tenured: 1441791K->1441791K(1441792K), 51.2142139 secs] 1823478K->1792950K(1823488K), [Perm : 122709K->122681K(131072K)], 51.2145271 secs]

        由此,判斷有大量對象占用了JVM的內(nèi)存,并且在GC后沒有釋放。

        同時(shí),實(shí)例的輸出日志中,發(fā)現(xiàn)有session復(fù)制現(xiàn)象,如下所示:

        這說明,WebLogic的被管服務(wù)器mserver2在向mserver1復(fù)制會(huì)話。

        由于mserver1無法處理兩個(gè)被管服務(wù)器的業(yè)務(wù),很快也訪問緩慢了。

        之后,重啟了WebLogic的2個(gè)實(shí)例,系統(tǒng)恢復(fù)正常。

        在接下來的系統(tǒng)監(jiān)控中,發(fā)現(xiàn)WebLogic其中一個(gè)實(shí)例的JAVA進(jìn)程的CPU使用率依然非常高,針對這一現(xiàn)象,我們dump出CPU的使用情況,發(fā)現(xiàn)有些JAVA線程使用CPU資源較高,且占用時(shí)間較長,如下所示:

        PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID

        27662 cncbss 2225M 1631M cpu10 0 10 0:22.46 22% java/73

        27662 cncbss 2225M 1631M cpu9 0 10 0:20.31 22% java/72

        27662 cncbss 2225M 1631M run 0 10 0:22.12 22% java/75

        經(jīng)過多次dump CPU使用情況,這三個(gè)線程仍然存在。

        此后dump WebLogic的線程,發(fā)現(xiàn)是如下線程導(dǎo)致高消耗CPU:

        "ExecuteThread: '51' for queue: 'weblogic.kernel.Default'" daemon prio=5 tid=0x00ef7008 nid=0x4a runnable [0x79480000..0x79481998]

        at java.util.Vector.indexOf(Vector.java:363)

        - waiting to lock <0xa21b73f8> (a java.util.Vector)

        at java.util.Vector.contains(Vector.java:321)

        at cnc.util.FyCol.add(FyCol.java:204)

        at cnc.util.FyCol.add(FyCol.java:194)

        at cnc.util.RecordSet.(RecordSet.java:199)

        at cnc.util.RecordSet.(RecordSet.java:93)

        at cnc.util.FyDao.query(FyDao.java:264)

        at cnc.util.FyDao.query(FyDao.java:234)

        at listquery.ListQueryBean.getfreeList(ListQueryBean.java:404)

        at listquery.ListQuery_gq76y8_EOImpl.getfreeList(ListQuery_gq76y8_EOImpl.java:98)

        at listquery.ListQuery_gq76y8_EOImpl_WLSkel.invoke(Unknown Source)

        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:166)

        at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:290)

        at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:248)

        at listquery.ListQuery_gq76y8_EOImpl_816_WLStub.getfreeList(Unknown Source)

        at cnc.query.list.QueryList.createExcel(QueryList.java:790)

        at cnc.query.list.ExportData.processRequest(ExportData.java:39)

        at cnc.query.list.ExportData.probe

      $doGet(ExportData.java:15)

        at cnc.query.list.ExportData.doGet(ExportData.java)

        at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)

        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)

        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)

        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)

        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)

        at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)

        at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)

        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)

        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)

        經(jīng)判斷,這是清單查詢的功能。

        之后,轉(zhuǎn)由開發(fā)人員對清單查詢代碼進(jìn)行分析。

        總結(jié)及改進(jìn)措施

        此次故障是由于個(gè)別程序性能不佳消耗CPU過高導(dǎo)致,在3~5個(gè)這樣查詢的情況下就會(huì)使系統(tǒng)出現(xiàn)緩慢現(xiàn)象,而且清單查詢對JVM內(nèi)存消耗也較大,如果有大量清單查詢會(huì)使JVM的內(nèi)存出現(xiàn)溢出情況。

        由于在目前情況下,1臺(tái)服務(wù)器的處理能力不足,特別是在業(yè)務(wù)高峰時(shí),WebLogic的1個(gè)被管服務(wù)器并不足以支撐2個(gè)被管服務(wù)器的業(yè)務(wù),因此其中一臺(tái)服務(wù)器出現(xiàn)宕機(jī)、掛起等嚴(yán)重故障,往往另外一臺(tái)也會(huì)出現(xiàn)相同故障。

        鑒于上述情況,我們提出下列改進(jìn)意見:

        1、 在第三臺(tái)機(jī)器上增加一個(gè)WebLogic實(shí)例,加入到集群系統(tǒng)。這樣在一臺(tái)被管服務(wù)器出現(xiàn)故障時(shí),另外兩臺(tái)依然可以實(shí)現(xiàn)負(fù)載均衡功能,宕機(jī)的可能性大大降低。

        2、 將清單查詢從BSS系統(tǒng)中移出去,目前這一項(xiàng)目正在進(jìn)行。

        3、 改良清單查詢程序的性能。

        附:

        收集高 CPU 占用率的數(shù)據(jù)

        對于有關(guān)收集高 CPU 占用率的數(shù)據(jù)的特定操作信息,請根據(jù)您的操作系統(tǒng)執(zhí)行以下步驟。

        重要說明:

        這些操作系統(tǒng)的所有信息都基于 Sun JVM。 目前在 JRockit 中還沒有辦法將 PID 從說明 CPU 占用率的操作系統(tǒng)命令(prstat、top、pslist 等等)映射到 Thread Dump 中的正確線程。 從 Jrockit 的 70SP4RP2 和 81SP2RP1 以后的版本起,就可實(shí)現(xiàn)此映射。 例如,在 Linux 中,Thread Dump 在以后的版本中將采用如下形式(PID 顯示在 Thread Dump 中):

        "ExecuteThread: '20' for queue: 'default'" id: 0x00000e80 prio: 5 ACTIVE, DAEMON, GCABLE

        thread: 0x469b0af0 lastj: 0xac0f19c

        pt_thr: 237596 pid: 23166

        at COM.jrockit.vm.Classes.defineClass0(Native Method)@0x8b4b798

        at COM.jrockit.vm.Classes.defineClass(Unknown Source)@0x8b4b8b1

        at java.lang.ClassLoader.defineClass(Unknown Source)@0x8b4b46f

        在上例中,PID 是 23166,您可以通過 Linux 或任何所在系統(tǒng)上的 top(或任何您需要在操作系統(tǒng)上使用的特定命令)輸出直接關(guān)聯(lián)該 PID。

        轉(zhuǎn)換為十六進(jìn)制號碼

        備注:為協(xié)助您計(jì)算在本模式中討論的十六進(jìn)制值,您可以在 Shell 腳本中使用下列行將十進(jìn)制號碼轉(zhuǎn)換為十六進(jìn)制號碼。如果您使用 Unix 操作系統(tǒng),那么轉(zhuǎn)換會(huì)很方便。

        dec2hex.sh:

        printf "dec -> hex: %d = %x \n" class="main">

      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦硬件知識 > CPU知識 > Java進(jìn)程占用CPU高怎么解決

      Java進(jìn)程占用CPU高怎么解決

      時(shí)間: 沈迪豪908 分享
      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦硬件知識 > CPU知識 > Java進(jìn)程占用CPU高怎么解決

      Java進(jìn)程占用CPU高怎么解決

      時(shí)間: 沈迪豪908 分享

        用法:

        $ sh dec2hex.sh 755

        dec -> hex: 755 = 2f3

        Solaris

        1. 在 Java 進(jìn)程中運(yùn)行 prstat命令。重復(fù)幾次這個(gè)操作,以便您能夠看到一種模式。例如:prstat -L -p 1 1

        2. 在 Java 進(jìn)程中運(yùn)行 pstack命令以獲得從輕量型進(jìn)程 (LWP) 到 PID(進(jìn)程 ID)的映射。

        示例:pstack 9499 并將輸出結(jié)果重定向到一個(gè)文件。

        如果您使用 Solaris 中的常規(guī)線程庫(即,在 LD_LIBRARY_PATH 中沒有 /usr/lib/lwp),LWP 就不會(huì)直接映射到操作系統(tǒng)線程,因此您必須從進(jìn)程中執(zhí)行 pstack(所以檢查看您是否正在使用替代線程庫)。

        3. 經(jīng)過一段時(shí)間后對服務(wù)器進(jìn)行若干 Thread Dump,確保您執(zhí)行正確的線程。

        您可以通過在 Java 進(jìn)程中執(zhí)行 kill -3 來達(dá)到此目的。

        4. 將 LWP ID 映射到 Java 線程 ID。

        例如,如果上述的 LWP 為“8”,它可以映射到 Java 線程“76”。然后將 76 換算為十六進(jìn)制值 0x4c。

        5. 檢查 Thread Dump,找到匹配“nid= <上述標(biāo)識符/值>”的線程。

        在本示例中,您找到匹配“nid=0x4c”的線程,而該線程就是正在消耗 CPU 資源的那個(gè)線程。

      Java進(jìn)程占用CPU高怎么解決相關(guān)文章:

      1.cpu使用率高怎么辦 減小系統(tǒng)進(jìn)程cpu占用方法

      2.svchost.exe進(jìn)程CPU占用率過高可能的原因以及解決方法如下

      3.搜狗瀏覽器進(jìn)程占cpu太多

      4.SYSTEM進(jìn)程的CPU占用率高怎么解決

      5.如何減小系統(tǒng)進(jìn)程cpu占用

      2017958