線程基本概念
線程是現代操作系統上進行並行執行的一個流行的編程方面的抽象概念。當一個程序內有多個線程被叉分出用以執行多個流時,這些線程就會在它們之間共享特定的資源(如,內存地址空間、打開的文件),以使叉分開銷最小化,並避免大量高成本的IPC(進程間通信)通道。這些功能讓線程在併發執行時成爲一個高效的機制。
在Linux中,程序中創建的線程(也稱爲輕量級進程,LWP)會具有和程序的PID相同的“線程組ID”。然後,各個線程會獲得其自身的線程ID(TID)。對於Linux內核調度器而言,線程不過是恰好共享特定資源的標準的進程而已。經典的命令行工具,如ps或top,都可以用來顯示線程級別的信息,只是默認情況下它們顯示進程級別的信息。
這裏提供了在Linux上顯示某個進程的線程的幾種方式。
3種方式
以下3種方式都可以查看進程下的線程
1)ps
2)top
3)htop
需要額外安裝,yum install -y htop
方式一 :ps
在ps命令中,“-T” 選項可以開啓線程查看。下面的命令列出了由進程號爲<pid>的進程創建的所有線程
ps -T -p <pid>
Tips: T 需要是大寫的
“SID”欄表示線程ID,而“CMD”欄則顯示了線程名稱。
示例
先通過jps 查看下java 都有那些進程
[root@cdh-manager my_script]# jps -l
11744 org.apache.zookeeper.server.quorum.QuorumPeerMain
11717 com.cloudera.enterprise.alertpublisher.AlertPublisher
12166 org.apache.hadoop.util.RunJar
21737 org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer
9865 com.cloudera.server.cmf.Main
12045 org.apache.hadoop.util.RunJar
11630 org.apache.hadoop.hdfs.server.namenode.NameNode
14000 com.cloudera.cmon.firehose.Main
11856 com.cloudera.kafka.wrap.Kafka
12049 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
11828 org.apache.hadoop.hbase.thrift.ThriftServer
11638 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
44761 org.apache.hadoop.util.RunJar
43993 sun.tools.jps.Jps
11643 org.apache.hadoop.hbase.rest.RESTServer
12283 org.apache.hadoop.hbase.master.HMaster
14043 com.cloudera.cmon.firehose.Main
14076 com.cloudera.cmf.eventcatcher.server.EventCatcherService
You have mail in /var/spool/mail/root
然後使用 ps -T -p 11744 查看下Zookeeper 進程相關的線程
“SID”欄表示線程ID,而“CMD”欄則顯示了線程名稱。
[root@cdh-manager my_script]# ps -T -p 11744
PID SPID TTY TIME CMD
11744 11744 ? 00:00:00 java
11744 12201 ? 00:00:01 java
11744 12213 ? 00:00:01 java
11744 12219 ? 00:00:01 java
11744 12255 ? 00:00:57 java
11744 12264 ? 00:00:00 java
11744 12270 ? 00:00:00 java
11744 12297 ? 00:00:00 java
11744 12301 ? 00:00:30 java
11744 12307 ? 00:00:12 java
11744 12312 ? 00:00:00 java
11744 12559 ? 00:00:02 java
11744 12585 ? 00:00:00 java
11744 12592 ? 00:11:46 java
11744 13203 ? 00:00:29 java
11744 13226 ? 00:00:00 java
11744 13345 ? 00:01:55 java
11744 13346 ? 00:00:00 java
11744 13347 ? 00:00:18 java
11744 13348 ? 00:00:17 java
11744 13349 ? 00:03:58 java
11744 13356 ? 00:00:44 java
11744 13357 ? 00:00:00 java
11744 13359 ? 00:00:44 java
11744 13366 ? 00:00:00 java
11744 13389 ? 00:01:29 java
11744 13392 ? 00:00:55 java
11744 13397 ? 00:01:43 java
11744 13401 ? 00:00:00 java
11744 15143 ? 00:01:29 java
11744 15146 ? 00:01:29 java
11744 15148 ? 00:07:16 java
11744 15511 ? 00:00:02 java
11744 44219 ? 00:00:00 java
方式二 :top
top命令可以實時顯示各個線程情況。要在top輸出中開啓線程查看,請調用top命令的“-H”選項,該選項會列出所有Linux線程。在top運行時,你也可以通過按“H”鍵將線程查看模式切換爲開或關。
top -H
top 跟蹤某個進程的線程, top -H -p <pid>
實際操作下:
top - 21:57:15 up 8 days, 1:15, 3 users, load average: 0.53, 0.38, 0.32
Threads: 71 total, 0 running, 71 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.5 us, 1.7 sy, 0.0 ni, 92.6 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 16247820 total, 218504 free, 10114996 used, 5914320 buff/cache
KiB Swap: 8257532 total, 8257012 free, 520 used. 5456792 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13508 kafka 20 0 2948520 404180 28288 S 6.6 2.5 603:06.78 java
14796 kafka 20 0 2948520 404180 28288 S 0.7 2.5 3:23.24 java
14638 kafka 20 0 2948520 404180 28288 S 0.3 2.5 10:36.47 java
14719 kafka 20 0 2948520 404180 28288 S 0.3 2.5 0:25.33 java
14766 kafka 20 0 2948520 404180 28288 S 0.3 2.5 18:31.44 java
14767 kafka 20 0 2948520 404180 28288 S 0.3 2.5 18:29.78 java
14770 kafka 20 0 2948520 404180 28288 S 0.3 2.5 3:55.67 java
14774 kafka 20 0 2948520 404180 28288 S 0.3 2.5 3:55.67 java
14801 kafka 20 0 2948520 404180 28288 S 0.3 2.5 3:23.15 java
11856 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.13 java
13501 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:05.39 java
13504 kafka 20 0 2948520 404180 28288 S 0.0 2.5 13:01.45 java
13506 kafka 20 0 2948520 404180 28288 S 0.0 2.5 13:01.57 java
13520 kafka 20 0 2948520 404180 28288 S 0.0 2.5 25:20.18 java
13521 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:04.70 java
13525 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:02.54 java
13542 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:16.86 java
13547 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.00 java
13548 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:43.64 java
13550 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:14.12 java
13552 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.00 java
13677 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.00 java
13693 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.00 java
13705 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.00 java
13706 kafka 20 0 2948520 404180 28288 S 0.0 2.5 12:20.87 java
14146 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:11.75 java
14149 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:02.84 java
14152 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:11.64 java
14156 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:11.46 java
14157 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:11.95 java
14158 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:11.31 java
14159 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:11.62 java
14160 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:11.45 java
14583 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.00 java
14635 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:02.42 java
14636 kafka 20 0 2948520 404180 28288 S 0.0 2.5 10:35.24 java
14640 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:49.03 java
14641 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:48.15 java
14644 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:48.03 java
14652 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:25.80 java
14654 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:25.13 java
14656 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:25.02 java
14718 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:24.68 java
14720 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:25.10 java
14721 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:25.14 java
14722 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:24.83 java
14725 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:08.84 java
14726 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:01.57 java
14731 kafka 20 0 2948520 404180 28288 S 0.0 2.5 1:49.47 java
14733 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.01 java
14764 kafka 20 0 2948520 404180 28288 S 0.0 2.5 3:20.57 java
14768 kafka 20 0 2948520 404180 28288 S 0.0 2.5 1:30.76 java
14772 kafka 20 0 2948520 404180 28288 S 0.0 2.5 10:32.63 java
14775 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:25.10 java
14777 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:25.27 java
14779 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.00 java
14784 kafka 20 0 2948520 404180 28288 S 0.0 2.5 0:00.01 java
方式三:htop
htop 的用法請參考這篇文章:
htop使用詳解--史上最強