大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 告訴你在Java中如何查看線程數(shù)

告訴你在Java中如何查看線程數(shù)

更新時間:2022-12-08 10:33:34 來源:動力節(jié)點 瀏覽3428次

1.概述

相信大家對線程的基本概念已經(jīng)有所了解,用Java線程并發(fā)的基本單位。在大多數(shù)情況下,應用程序的吞吐量增加當創(chuàng)建多個線程并行任務。

然而,總有一個飽和點。畢竟,一個應用程序的吞吐量取決于CPU和內(nèi)存資源。在一定限制,增加線程的數(shù)量會導致高內(nèi)存,線程上下文切換等。

所以一個好的起點在故障診斷Java應用程序中的一個高端內(nèi)存問題是監(jiān)控線程的數(shù)量。在本教程中,我們將看看一些方式我們可以檢查Java進程創(chuàng)建的線程的數(shù)量。

2.圖形化Java監(jiān)視工具

最簡單的方式看到Java線程的數(shù)量是使用像Java VisualVM的圖形工具。除了應用程序線程,Java VisualVM還列出了GC或任何其他線程所使用的應用程序(如JMX線程)。

此外,它還顯示了諸如線程狀態(tài)及其持續(xù)時間:

監(jiān)控線程的數(shù)量是在Java VisualVM最基本的特征。一般來說,圖形工具更先進,允許應用程序的實時監(jiān)控。例如,Java VisualVM允許我們樣品CPU堆棧跟蹤,從而找到一個類或方法,可能會導致CPU瓶頸。

Java VisualVM分布與JDK安裝在Windows機器上。應用程序部署在Linux上,我們需要連接到遠程應用程序。這需要JMX VM參數(shù)。

因此,這些工具不會工作,如果一個應用程序已經(jīng)運行沒有這些參數(shù)。在后面的小節(jié)中,我們將看到如何使用命令行工具獲得線程的數(shù)量。

3.Java api

在一些用例中,我們可以找到應用程序中線程的數(shù)量。例如,顯示在日志監(jiān)視儀表板或公開。

在這種情況下,我們依靠Java api的線程數(shù)。值得慶幸的是,有一個activeCount () API在線程類:

public class FindNumberofThreads {
    public static void main(String[] args) {
        System.out.println("Number of threads " + Thread.activeCount());
    }
}

和輸出將會是:

Number of threads 2

值得注意的是,如果我們看到在Java VisualVM線程的數(shù)量,我們將會看到更多的相同的應用程序線程。這是因為activeCount()只返回線程的數(shù)量在同一ThreadGroup。Java的所有線程分為組織更容易管理。

在這個例子中,我們剛剛父ThreadGroup,即。主要:

public static void main(String[] args) {
    System.out.println("Current Thread Group - " + Thread.currentThread().getThreadGroup().getName());
}
Current Thread Group - main

如果有許多線程組在Java應用程序中,activeCount()不會給一個正確的輸出。例如,它不會返回GC線程的數(shù)量。

在這樣的場景中,我們可以使用JMX API:

public static void main(String[] args) {
    System.out.println("Total Number of threads " + ManagementFactory.getThreadMXBean().getThreadCount());
}

這個API返回總數(shù)從所有線程的線程組,GC, JMX,等等。

Total Number of threads 6

事實上,JMX圖形工具如Java VisualVM使用相同的API的數(shù)據(jù)。

4.命令行工具

之前,我們討論了Java VisualVM,圖形分析住線程在一個應用程序的工具。雖然生活的可視化線程是一個偉大的工具,它有一個小的影響應用程序的性能。因此不建議用于生產(chǎn)環(huán)境。

此外,正如我們之前所討論的,在Linux中Java VisualVM需要遠程連接。事實上,在某些情況下,它需要額外的配置。例如,一個應用程序運行在一個碼頭工人或Kubernetes需要額外的服務和端口配置。

在這種情況下,我們必須依靠命令行工具在主機環(huán)境中線程數(shù)。

幸運的是,Java提供一些命令線程轉(zhuǎn)儲。我們可以分析一個線程轉(zhuǎn)儲為一個文本文件或使用一個線程dump analyzer工具檢查線程的數(shù)量以及它們的狀態(tài)。

阿里巴巴阿爾薩斯是另一個偉大的command-l

top -H -p 1

這里,- h是一個命令行選項來顯示每個線程在一個Java進程。如果沒有這個標志,上面的命令將顯示進程中的所有線程的綜合統(tǒng)計。- p選項過濾器的輸出目標應用程序的進程id:

top - 15:59:44 up 7 days, 19:23,  0 users,  load average: 0.52, 0.41, 0.36
Threads:  37 total,   0 running,  37 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.2 us,  2.2 sy,  0.0 ni, 93.4 id,  0.8 wa,  0.0 hi,  0.3 si,  0.0 st
MiB Mem :   1989.2 total,    110.2 free,   1183.1 used,    695.8 buff/cache
MiB Swap:   1024.0 total,    993.0 free,     31.0 used.    838.8 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1 flink     20   0 2612160 304084  29784 S   0.0  14.9   0:00.07 java
  275 flink     20   0 2612160 304084  29784 S   0.0  14.9   0:02.87 java
  276 flink     20   0 2612160 304084  29784 S   0.0  14.9   0:00.37 VM Thread
  277 flink     20   0 2612160 304084  29784 S   0.0  14.9   0:00.00 Reference Handl
  278 flink     20   0 2612160 304084  29784 S   0.0  14.9   0:00.00 Finalizer
  279 flink     20   0 2612160 304084  29784 S   0.0  14.9   0:00.00 Signal Dispatch

如上圖所示,它顯示了線程id,即。、PID和線程的CPU和內(nèi)存使用率。類似于Java VisualVM,頂部命令將列出所有線程,包括GC, JMX或任何其他子流程。

發(fā)現(xiàn)我們使用的進程ID作為參數(shù)在上面的命令中,我們可以使用ps命令:

ps -ef | grep java

事實上,我們可以使用ps命令來列出線程:

ps -e -T | grep 1

t選項告訴ps命令列出所有線程開始由應用程序:

1     1 ?        00:00:00 java
1   275 ?        00:00:02 java
1   276 ?        00:00:00 VM Thread
1   277 ?        00:00:00 Reference Handl
1   278 ?        00:00:00 Finalizer
1   279 ?        00:00:00 Signal Dispatch
1   280 ?        00:00:03 C2 CompilerThre
1   281 ?        00:00:01 C1 CompilerThre

在這里,第一列是PID,第二列顯示了每個線程Linux線程ID。

5. 結(jié)論

在本文中,我們發(fā)現(xiàn)我們有許多方式可以找到Java應用程序線程的數(shù)量。在大多數(shù)情況下,使用命令行選項像頂部或ps命令應該是首選的方法。

然而,在某些情況下,我們可能還需要圖形工具如Java VisualVM。所有示例代碼都可以在GitHub。以上就是動力節(jié)點小編介紹的"告訴你在Java中如何查看線程數(shù)",希望對大家有幫助,想了解更多可查看Java多線程編程技術文檔。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产综合久久一区二区三区 | 中国国语毛片免费观看视频 | 国产成年网站 | 亚洲欧美日韩精品久久亚洲区 | 国产亚洲一区二区麻豆 | 精品国产一区二区三区成人 | 免费黄色福利视频 | 亚洲国产伦理 | 日本在线观看不卡 | 国产成人精品亚洲777图片 | 伊人天天干 | 人做人爱视频欧美在线观看 | 777精品成人影院 | 免费观看欧美一级高清 | 九九九精品视频免费 | a毛片在线还看免费网站 | 日韩亚洲一区中文字幕 | 青青青爽在线视频观看大全 | 91啦视频在线观看 | 国产成人精品综合 | 免费一级毛片在线播放不收费 | 四虎亚洲国产成人久久精品 | 伊人99综合 | 亚洲a在线播放 | 97精品视频共享总站 | 国产伦码精品一区二区 | 久久成人小视频 | 性欧美一级毛片在线播放 | 免费观看成人毛片 | 高清人人天天夜夜曰狠狠狠狠 | 日本中文一二区有码在线观看 | 久久久久久久久影院 | 成人国产片免费 | a一级毛片免费播放 | 欧美日韩亚洲精品一区二区 | 男女午夜影院 | 粗大猛烈进出呻吟声的视频 | 亚洲综合日韩在线亚洲欧美专区 | 日本中文一二区有码在线观看 | 国产96福利视频在线观看 | 天天操天天干天天摸 |