1.根據進程號進行查詢:php
# pstree -p 進程號html
# top -Hp 進程號java
2.根據進程名字進行查詢:python
# pstree -p `ps -e | grep server | awk '{print $1}'`mysql
# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -llinux
這裏利用了管道和命令替換,nginx
關於命令替換,我也是今天才瞭解,就是說用``括起來的命令會優先執行,而後以其輸出做爲其餘命令的參數,web
上述就是用 ps -e | grep server | awk '{print $1}' 的輸出(進程號),做爲 pstree -p 的參數sql
管道和命令替換的區別是:shell
管道:管道符號"|"左邊命令的輸出做爲右邊命令的輸入
命令替換:將命令替換符"``"中命令的輸出做爲其餘命令相應位置的參數
windows:
以前由於線程內出現異常致使Python部分線程退出,程序以單線程方式運行了好幾個星期,浪費了不少時間。
如何查看當前進程有多少個存活線程呢?
方法1)pstree -p 4761(進程ID)。以下截圖所示:
三種方法:
1。 使用top命令,具體用法是 top -H
加上這個選項,top的每一行就不是顯示一個進程,而是一個線程。
2。 使用ps命令,具體用法是 ps -xH
這樣能夠查看全部存在的線程,也可使用grep做進一步的過濾。
3。 使用ps命令,具體用法是 ps -mq PID (ubuntu下貌似不能使用)
這樣能夠看到指定的進程產生的線程數目。
更進一步,其實一些系統監控工具,在本質上也是讀取的系統產生的文件罷了。好比說進程這個事情,
如今假設有進程號爲 5000 的進程,查看這個進程的全部具體信息,在哪查看呢?
看看這個目錄吧,/proc/5000/ 這裏面有你全部想要的。其實stat表明着當前的一些信息。
例如:輸入命令cat /proc/`pgrep vsftpd`/status
Name: vsftpd State: S (sleeping) Tgid: 1735 Pid: 1735 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 32 Groups: VmPeak: 4052 kB VmSize: 4036 kB VmLck: 0 kB VmHWM: 1036 kB VmRSS: 1036 kB VmData: 356 kB VmStk: 88 kB VmExe: 112 kB VmLib: 3280 kB VmPTE: 32 kB Threads: 1 SigQ: 1/5926 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000000000 SigCgt: 0000000000012001 CapInh: 0000000000000000 CapPrm: ffffffffffffffff CapEff: ffffffffffffffff CapBnd: ffffffffffffffff Cpus_allowed: ff Cpus_allowed_list: 0-7 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 1 nonvoluntary_ctxt_switches: 3
使用ps命令來查看進程的時候,進程狀態分別對應的含義以下:
D 不可中斷睡眠 (一般是在IO操做) 收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生
R 正在運行或可運行(在運行隊列排隊中)
S 可中斷睡眠 (休眠中, 受阻, 在等待某個條件的造成或接受到信號)
T 已中止的 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後中止運行
W 正在換頁(2.6.內核以前有效)
X 死進程 (未開啓)
Z 殭屍進程 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放BSD風格的
< 高優先級(not nice to other users)
N 低優先級(nice to other users)
L 頁面鎖定在內存(實時和定製的IO)
s 一個信息頭
l 多線程(使用 CLONE_THREAD,像NPTL的pthreads的那樣)
+ 在前臺進程組
1
2
3
4
5
6
7
|
[root@Betty conf]
# vi modb.cnf
[mysql-proxy]
...
daemon =
true
keepalive =
true
...
|
1
2
3
|
To print a process tree:
ps
-ejH
ps
axjf
|
1
2
3
|
[root@Betty conf]
# ps axjf|grep mysql-proxy|grep -v grep
1 3755 3754 3754 ? -1 S 0 0:00 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
3755 3756 3754 3754 ? -1 Sl 0 0:00 \_ mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
|
1
2
3
|
To get info about threads:
ps
-eLf
ps
axms
|
1
2
3
4
5
6
7
8
9
|
[root@Betty conf]
# ps -eLf|grep mysql-proxy
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 3755 1 3755 0 1 15:14 ? 00:00:00 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3756 0 5 15:14 ? 00:00:00 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3757 0 5 15:14 ? 00:00:00 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3758 0 5 15:14 ? 00:00:00 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3759 0 5 15:14 ? 00:00:00 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3760 0 5 15:14 ? 00:00:00 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 4154 18711 4154 0 1 16:32 pts
/5
00:00:00
grep
mysql-proxy
|
1
2
3
4
5
6
7
8
9
10
|
[root@Betty conf]
# ps -eo ruser,pid,ppid,lwp,psr,args -L|grep mysql-proxy
RUSER PID PPID LWP PSR COMMAND
root 3755 1 3755 2 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3756 1 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3757 0 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3758 3 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3759 1 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 3756 3755 3760 1 mysql-proxy --defaults-
file
=
/usr/local/mysql-proxy/conf/modb
.cnf
root 4162 18711 4162 2
grep
mysql-proxy
[root@Betty conf]
#
|
1
2
3
4
5
6
7
8
|
To see every process with a user-defined
format
:
ps
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,
comm
ps
axo stat,euid,ruid,
tty
,tpgid,sess,pgrp,ppid,pid,pcpu,
comm
...
-L Show threads, possibly with LWP and NLWP columns
...
psr PSR processor that process is currently assigned to.
...
|
1
2
3
|
[root@Betty conf]
# ps -e |grep mysql-proxy
3755 ? 00:00:00 mysql-proxy
3756 ? 00:00:00 mysql-proxy
|
1
2
3
4
5
6
7
8
9
|
[root@Betty conf]
# pstree 3755
mysql-proxy---mysql-proxy---4*[{mysql-proxy}]
[root@Betty conf]
# pstree -p 3756
mysql-proxy(3756)-+-{mysql-proxy}(3757)
|-{mysql-proxy}(3758)
|-{mysql-proxy}(3759)
`-{mysql-proxy}(3760)
[root@Betty conf]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@Betty conf]
# top -Hp 3756
top
- 17:32:19 up 8:26, 6
users
, load average: 0.00, 0.00, 0.00
Tasks: 5 total, 0 running, 5 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.1%ni, 99.7%
id
, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3941948k total, 897296k used, 3044652k
free
, 116232k buffers
Swap: 5996536k total, 0k used, 5996536k
free
, 516676k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3756 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 mysql-proxy
3757 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 mysql-proxy
3758 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 mysql-proxy
3759 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 mysql-proxy
3760 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 mysql-proxy
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
Current Fields: AEHIOQTWKNMbcdfgjplrsuvyzX
for
window 1:Def
Toggle fields via field letter,
type
any other key to
return
* A: PID = Process Id
* E: USER = User Name
* H: PR = Priority
* I: NI = Nice value
* O: VIRT = Virtual Image (kb)
* Q: RES = Resident size (kb)
* T: SHR = Shared Mem size (kb)
* W: S = Process Status
* K: %CPU = CPU usage
* N: %MEM = Memory usage (RES)
* M: TIME+ = CPU Time, hundredths
b: PPID = Parent Process Pid
c: RUSER = Real user name
d: UID = User Id
f: GROUP = Group Name
g: TTY = Controlling Tty
j: P = Last used cpu (SMP)
p: SWAP = Swapped size (kb)
l: TIME = CPU Time
r: CODE = Code size (kb)
s: DATA = Data+Stack size (kb)
u: nFLT = Page Fault count
v
: nDRT = Dirty Pages count
y: WCHAN = Sleeping
in
Function
z: Flags = Task Flags <sched.h>
* X: COMMAND = Command name
/line
Flags field:
0x00000001 PF_ALIGNWARN
0x00000002 PF_STARTING
0x00000004 PF_EXITING
0x00000040 PF_FORKNOEXEC
0x00000100 PF_SUPERPRIV
0x00000200 PF_DUMPCORE
0x00000400 PF_SIGNALED
0x00000800 PF_MEMALLOC
0x00002000 PF_FREE_PAGES (2.5)
0x00008000 debug flag (2.5)
0x00024000 special threads (2.5)
0x001D0000 special states (2.5)
0x00100000 PF_USEDFPU (thru 2.4)
|
1
|
* J: P = Last used cpu (SMP)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
top
- 17:34:07 up 8:27, 6
users
, load average: 0.00, 0.00, 0.00
Tasks: 5 total, 0 running, 5 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%
id
, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3941948k total, 897172k used, 3044776k
free
, 116264k buffers
Swap: 5996536k total, 0k used, 5996536k
free
, 516676k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ P COMMAND
3756 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 1 mysql-proxy
3757 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 0 mysql-proxy
3758 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 1 mysql-proxy
3759 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 1 mysql-proxy
3760 root 15 0 195m 3752 1804 S 0.0 0.1 0:00.00 1 mysql-proxy
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
[root@Betty conf]
# cat /proc/3756/status
Name: mysql-proxy
State: S (sleeping)
SleepAVG: 98%
Tgid: 3756
Pid: 3756
PPid: 3755
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups: 0 1 2 3 4 6 10
VmPeak: 252512 kB
VmSize: 200244 kB
VmLck: 0 kB
VmHWM: 3752 kB
VmRSS: 3752 kB
VmData: 118404 kB
VmStk: 88 kB
VmExe: 16 kB
VmLib: 10888 kB
VmPTE: 288 kB
StaBrk: 0df5c000 kB
Brk: 0e087000 kB
StaStk: 7fffb0fea000 kB
Threads: 5
SigQ: 1
/38784
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000381000
SigCgt: 0000000180004a03
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
Cpus_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000ffff
Mems_allowed: 00000000,00000001
[root@Betty conf]
#
|
1
|
Threads: 5
|
3中方法:
1. cat /proc/${pid}/status
2. pstree -p ${pid}
3. top -p ${pid} 再按H
或者直接輸入 top -bH -d 3 -p ${pid}
查看進程工做
strace -p ${pid}
開啓iptables日誌
iptables -t raw -I PREROUTING 1 -p tcp --syn -m statistic --mode nth --every 5000 -j LOG --log-prefix "IPTABLES DETECTING SYN: "
tail /var/log/message
關閉iptables日誌
iptables -t raw -F
查看是否被攻擊
netstat -n -p TCP | grep SYN_RECV | grep :80 | wc -l
netstat -tn|grep ESTABLISH|wc -l
查出服務器是否受到DOS攻擊 (看SYN_RECV)
netstat -an |awk '{print $6}'|sort|uniq -c|sort -rn
5116 TIME_WAIT
1624 ESTABLISHED
531 FIN_WAIT1
512 FIN_WAIT2
126 SYN_RECV
10 CLOSING
9 LISTEN
查出服務器異常IP連接
netstat -an | awk '{print $5}' | cut -d":" -f1 | sort | uniq -c | sort -rn | head
在Linux中查看線程數的三種方法
一、top -H
手冊中說:-H : Threads toggle
加上這個選項啓動top,top一行顯示一個線程。不然,它一行顯示一個進程。
二、ps xH
手冊中說:H Show threads as if they were processes
這樣能夠查看全部存在的線程。
三、ps -mp <PID>
手冊中說:m Show threads after processes
這樣能夠查看一個進程起的線程數。
查看進程
1. top 命令
top命令查看系統的資源情況
load average表示在過去的一段時間內有多少個進程企圖獨佔CPU
zombie 進程 :不是異常狀況。一個進程從建立到結束在最後那一段時間遍是殭屍。留在內存中等待父進程取的東西即是殭屍。任何程序都有殭屍狀態,它佔用一點內存資源,僅 僅是表象而已沒必要懼怕。若是程序有問題有機會碰見,解決大批量殭屍簡單有效的辦法是重起。kill是無任何效果的stop模式:與sleep進程應區 別,sleep會主動放棄cpu,而stop是被動放棄cpu ,例單步跟蹤,stop(暫停)的進程是沒法本身回到運行狀態的。
cpu states:
nice:讓出百分比irq:中斷處理佔用
idle:空間佔用百分比 iowait:輸入輸出等待(若是它很大說明外存有瓶頸,須要升級硬盤(SCSI))
Mem:內存狀況
設計思想:把資源省下來不用即是浪費,如添加內存後free值會不變,buff值會增大。 判斷物理內存夠不夠,看交換分區的使用狀態。
交互命令:
[Space]當即刷新顯示
[h]顯示幫助屏幕
[k] 殺死某進程。你會被提示輸入進程 ID 以及要發送給它的信號。 通常的終止進程可使用15信號;若是不能正常結束那就使用信號9強制結束該進程。默認值是信號15。在安全模式中此命令被屏蔽。
[n] 改變顯示的進程數量。你會被提示輸入數量。
[u] 按用戶排序。
[M] 按內存用量排序。
[o][O] 改變顯示項目的順序。
[P] 根據CPU使用百分比大小進行排序。
[T] 根據時間/累計時間進行排序。
[Ctrl+L] 擦除而且重寫屏幕。
[q] 退出程序。
[r] 從新安排一個進程的優先級別。系統提示用戶輸入須要改變的進程PID以及須要設置的進程優先級值。輸入一個正值將使優先級下降,反之則可使該進程擁有更高的優先權。默認值是10。
[S] 切換到累計模式。
[s] 改變兩次刷新之間的延遲時間。系統將提示用戶輸入新的時間,單位爲s。若是有小數,就換算成m s。輸入0值則系統將不斷刷新,默認值是5 s。須要注意的是若是設置過小的時間,極可能會引發不斷刷新,從而根原本不及看清顯示的狀況,並且系統負載也會大大增長。
縮寫含義:
PID每一個進程的ID
USER進程全部者的用戶名
PRI每一個進程的優先級別
NI每一個優先級的值
SIZE 進程的代碼大小加上數據大小再加上堆棧空間大小的總數,單位是KB RSS 進程佔用的物理內存的總數量,單位是KB
SHARE進程使用共享內存的數量
STAT 進程的狀態。其中S表明休眠狀態;D表明不可中斷的休眠狀態;R表明運行狀態;Z表明僵死狀態;T表明中止或跟蹤狀態
%CPU進程自最近一次刷新以來所佔用的CPU時間和總時間的百分比
%MEM進程佔用的物理內存佔總內存的百分比
TIME進程自啓動以來所佔用的總CPU時間
CPU CPU標識
COMMAND進程的命令名稱
2. ps命令
ps查看當前用戶的活動進程,若是加上參數能夠顯示更多的信息,如-a,顯示全部用戶的進程
ps ax :tty值爲「?」是守護進程,叫deamon 無終端,大多系統服務是此進程,內核態進程是看不到的
ps axf :看進程樹,以樹形方式現實進程列表敲 ,init是1號進程,系統全部進程都是它派生的,殺不掉
ps axm :會把線程列出來。在linux下進程和線程是統一的,是輕量級進程的兩種方式。
ps axu :顯示進程的詳細狀態。
vsz:說此進程一共佔用了多大物理內存。
rss:請求常駐內存多少
查看線程
其實linux沒有線程,都是用進程模仿的
1. ps -ef f
用樹形顯示進程和線程,好比說我想找到proftp如今有多少個進程/線程,能夠用
$ ps -ef f | grep proftpd
nobody 23117 1 0 Dec23 ? S 0:00 proftpd: (accepting connections)
jack 23121 23117 0 Dec23 ? S 7:57 \_ proftpd: jack - ftpsrv: IDLE
jack 28944 23117 0 Dec23 ? S 4:56 \_ proftpd: jack - ftpsrv: IDLE
這樣就能夠看到proftpd這個進程下面掛了兩個線程。
在Linux下面好像由於沒有真正的線程,是用進程模擬的,有一個是輔助線程,因此真正程序開的線程應該只有一個。
2. pstree -c也能夠達到相同的效果
$ pstree -c | grep proftpd
|-proftpd-+-proftpd
| `-proftpd
3. cat /proc/${pid}/status
能夠查看大體的狀況
4. pstack
有些系統能夠用這個東東,能夠查看全部線程的堆棧
如何查看進程中各線程的內存佔用狀況?
用ps aux只能查看到進程,若是進程裏面使用了pthread編程,用什麼命令才能查詢到進程裏的線程資源佔用?
ps aux | grep不就是了
本文主要介紹在CentOS系統上查看進程的線程數方法。
方法一 pstack命令(推薦)
首先獲得進程的pid
使用以下命令便可得出該進程的線程數
# pstack pid |grep LWP |wc -l
方法二 top查看 (最實用的實時監控)
# ps -aux|grep IASTool (查找進程的pid)
# top -p pid
#輸入H (顯示Show threads On)即會顯示該進程的線程
一、top -H
手冊中說:-H : Threads toggle
加上這個選項啓動top,top一行顯示一個線程。不然,它一行顯示一個進程。
二、ps xH
手冊中說:H Show threads as if they were processes
這樣能夠查看全部存在的線程。
三、ps -mp <PID>
手冊中說:m Show threads after processes
這樣能夠查看一個進程起的線程數。
更多詳盡的解釋還能夠man ps,man top。
問題:我正在運行一個程序,它在運行時會派生出多個線程。我想知道程序在運行時會有多少線程。在 Linux 中檢查進程的線程數最簡單的方法是什麼?
若是你想看到 Linux 中每一個進程的線程數,有如下兩種方法能夠作到這一點。
方法一: /proc
proc 僞文件系統,它駐留在 /proc 目錄,這是最簡單的方法來查看任何活動進程的線程數。 /proc 目錄以可讀文本文件形式輸出,提供現有進程和系統硬件相關的信息如 CPU、中斷、內存、磁盤等等。
$ cat /proc/<pid>/status
上面的命令將顯示進程 <pid> 的詳細信息,包括過程狀態(例如, sleeping, running),父進程 PID,UID,GID,使用的文件描述符的數量,以及上下文切換的數量。輸出也包括進程建立的總線程數以下所示。
Threads: <N>
例如,檢查 PID 20571進程的線程數:
$ cat /proc/20571/status
輸出代表該進程有28個線程。
或者,你能夠在 /proc//task 中簡單的統計子目錄的數量,以下所示。
$ ls /proc/<pid>/task | wc
這是由於,對於一個進程中建立的每一個線程,在 /proc/<pid>/task
中會建立一個相應的目錄,命名爲其線程 ID。由此在 /proc/<pid>/task
中目錄的總數表示在進程中線程的數目。
方法二: ps
若是你是功能強大的 ps 命令的忠實用戶,這個命令也能夠告訴你一個進程(用「H」選項)的線程數。下面的命令將輸出進程的線程數。「h」選項須要放在前面。
$ ps hH p <pid> | wc -l
經過ps及top命令查看進程信息時,只能查到相對路徑,查不到的進程的詳細信息,如絕對路徑等。這時,咱們須要經過如下的方法來查看進程的詳細信息:
Linux在啓動一個進程時,系統會在/proc下建立一個以PID命名的文件夾,在該文件夾下會有咱們的進程的信息,其中包括一個名爲exe的文件即記錄了絕對路徑,經過ll或ls –l命令便可查看。
cwd符號連接的是進程運行目錄;
exe符號鏈接就是執行程序的絕對路徑;
cmdline就是程序運行時輸入的命令行命令;
environ記錄了進程運行時的環境變量;
fd目錄下是進程打開或使用的文件的符號鏈接。
CreateToolhelp32Snapshot能夠經過獲取進程信息爲指定的進程、進程使用的堆[HEAP]、模塊[MODULE]、線程創建一個快照。
在Linux中查看線程數的三種方法
一、top -H
手冊中說:-H : Threads toggle
加上這個選項啓動top,top一行顯示一個線程。不然,它一行顯示一個進程。
二、ps xH
手冊中說:H Show threads as if they were processes
這樣能夠查看全部存在的線程。
三、ps -mp <PID>
手冊中說:m Show threads after processes
這樣能夠查看一個進程起的線程數。
查看進程
1. top 命令
top命令查看系統的資源情況
load average表示在過去的一段時間內有多少個進程企圖獨佔CPU
zombie 進程 :不是異常狀況。一個進程從建立到結束在最後那一段時間遍是殭屍。留在內存中等待父進程取的東西即是殭屍。任何程序都有殭屍狀態,它佔用一點內存資源,僅 僅是表象而已沒必要懼怕。若是程序有問題有機會碰見,解決大批量殭屍簡單有效的辦法是重起。kill是無任何效果的stop模式:與sleep進程應區 別,sleep會主動放棄cpu,而stop是被動放棄cpu ,例單步跟蹤,stop(暫停)的進程是沒法本身回到運行狀態的。
cpu states:
nice:讓出百分比irq:中斷處理佔用
idle:空間佔用百分比 iowait:輸入輸出等待(若是它很大說明外存有瓶頸,須要升級硬盤(SCSI))
Mem:內存狀況
設計思想:把資源省下來不用即是浪費,如添加內存後free值會不變,buff值會增大。 判斷物理內存夠不夠,看交換分區的使用狀態。
交互命令:
[Space]當即刷新顯示
[h]顯示幫助屏幕
[k] 殺死某進程。你會被提示輸入進程 ID 以及要發送給它的信號。 通常的終止進程可使用15信號;若是不能正常結束那就使用信號9強制結束該進程。默認值是信號15。在安全模式中此命令被屏蔽。
[n] 改變顯示的進程數量。你會被提示輸入數量。
[u] 按用戶排序。
[M] 按內存用量排序。
[o][O] 改變顯示項目的順序。
[P] 根據CPU使用百分比大小進行排序。
[T] 根據時間/累計時間進行排序。
[Ctrl+L] 擦除而且重寫屏幕。
[q] 退出程序。
[r] 從新安排一個進程的優先級別。系統提示用戶輸入須要改變的進程PID以及須要設置的進程優先級值。輸入一個正值將使優先級下降,反之則可使該進程擁有更高的優先權。默認值是10。
[S] 切換到累計模式。
[s] 改變兩次刷新之間的延遲時間。系統將提示用戶輸入新的時間,單位爲s。若是有小數,就換算成m s。輸入0值則系統將不斷刷新,默認值是5 s。須要注意的是若是設置過小的時間,極可能會引發不斷刷新,從而根原本不及看清顯示的狀況,並且系統負載也會大大增長。
縮寫含義:
PID每一個進程的ID
USER進程全部者的用戶名
PRI每一個進程的優先級別
NI每一個優先級的值
SIZE 進程的代碼大小加上數據大小再加上堆棧空間大小的總數,單位是KB RSS 進程佔用的物理內存的總數量,單位是KB
SHARE進程使用共享內存的數量
STAT 進程的狀態。其中S表明休眠狀態;D表明不可中斷的休眠狀態;R表明運行狀態;Z表明僵死狀態;T表明中止或跟蹤狀態
%CPU進程自最近一次刷新以來所佔用的CPU時間和總時間的百分比
%MEM進程佔用的物理內存佔總內存的百分比
TIME進程自啓動以來所佔用的總CPU時間
CPU CPU標識
COMMAND進程的命令名稱
2. ps命令
ps查看當前用戶的活動進程,若是加上參數能夠顯示更多的信息,如-a,顯示全部用戶的進程
ps ax :tty值爲「?」是守護進程,叫deamon 無終端,大多系統服務是此進程,內核態進程是看不到的
ps axf :看進程樹,以樹形方式現實進程列表敲 ,init是1號進程,系統全部進程都是它派生的,殺不掉
ps axm :會把線程列出來。在linux下進程和線程是統一的,是輕量級進程的兩種方式。
ps axu :顯示進程的詳細狀態。
vsz:說此進程一共佔用了多大物理內存。
rss:請求常駐內存多少
查看線程
其實linux沒有線程,都是用進程模仿的
1. ps -ef f
用樹形顯示進程和線程,好比說我想找到proftp如今有多少個進程/線程,能夠用
$ ps -ef f | grep proftpd
nobody 23117 1 0 Dec23 ? S 0:00 proftpd: (accepting connections)
jack 23121 23117 0 Dec23 ? S 7:57 \_ proftpd: jack - ftpsrv: IDLE
jack 28944 23117 0 Dec23 ? S 4:56 \_ proftpd: jack - ftpsrv: IDLE
這樣就能夠看到proftpd這個進程下面掛了兩個線程。
在Linux下面好像由於沒有真正的線程,是用進程模擬的,有一個是輔助線程,因此真正程序開的線程應該只有一個。
2. pstree -c也能夠達到相同的效果
$ pstree -c | grep proftpd
|-proftpd-+-proftpd
| `-proftpd
3. cat /proc/${pid}/status
能夠查看大體的狀況
4. pstack
有些系統能夠用這個東東,能夠查看全部線程的堆棧
如何查看進程中各線程的內存佔用狀況?
用ps aux只能查看到進程,若是進程裏面使用了pthread編程,用什麼命令才能查詢到進程裏的線程資源佔用?
ps aux | grep不就是了
查看最大線程數:
cat /proc/sys/kernel/threads-max
ulimit
User limits - limit the use of system-wide resources.
Syntax
ulimit [-acdfHlmnpsStuv] [limit]
Options
-S Change and report the soft limit associated with a resource.
-H Change and report the hard limit associated with a resource.
-a All current limits are reported.
-c The maximum size of core files created.
-d The maximum size of a process's data segment.
-f The maximum size of files created by the shell(default option)
-l The maximum size that may be locked into memory.
-m The maximum resident set size.
-n The maximum number of open file descriptors.
-p The pipe buffer size.
-s The maximum stack size.
-t The maximum amount of cpu time in seconds.
-u The maximum number of processes available to a single user.
-v The maximum amount of virtual memory available to the process.
ulimit provides control over the resources available to the shell and to processes started by it, on systems that allow such control.
If limit is given, it is the new value of the specified resource. Otherwise, the current value of the soft limit for the specified resource is printed, unless the `-H' option is supplied.
When setting new limits, if neither `-H' nor `-S' is supplied, both the hard and soft limits are set.
Values are in 1024-byte increments, except for `-t', which is in seconds, `-p', which is in units of 512-byte blocks, and `-n' and `-u', which are unscaled values.
The return status is zero unless an invalid option is supplied, a non-numeric argument other than unlimited is supplied as a limit, or an error occurs while setting a new limit.
ulimit is a bash built in command.
Ulimit命令
設置限制 能夠把命令加到profile文件裏,也能夠在/etc/security/limits.conf文件中定義
限制。
命令參數
-a 顯示全部限制
-c core文件大小的上限
-d 進程數據段大小的上限
-f shell所能建立的文件大小的上限
-m 駐留內存大小的上限
-s 堆棧大小的上限
-t 每秒可佔用的CPU時間上限
-p 管道大小
-n 打開文件數的上限
-u 進程數的上限
-v 虛擬內存的上限
除可用Ulimit命令設置外,也能夠在/etc/security/limits.conf文件中定義限制。
domino type item value
domino是以符號@開頭的用戶名或組名,*表示全部用戶,type設置爲hard or soft。item指
定想限制的資源。如cpu,core nproc or maxlogins。value是相應的限制值。
系統限制默認值
[root@flyinweb ~]# ulimit -alinux 系統中單個進程的最大線程數有其最大的限制 PTHREAD_THREADS_MAX
這個限制能夠在 /usr/include/bits/local_lim.h 中查看
對 linuxthreads 這個值通常是 1024,對於 nptl 則沒有硬性的限制,僅僅受限於系統的資源
這個系統的資源主要就是線程的 stack 所佔用的內存,用 ulimit -s 能夠查看默認的線程棧大小,通常狀況下,這個值是 8M
能夠寫一段簡單的代碼驗證最多能夠建立多少個線程
試驗顯示,在 linuxthreads 上最多能夠建立 381 個線程,以後就會返回 EAGAIN
在 nptl 上最多能夠建立 382 個線程,以後就會返回 ENOMEM
這個值和理論徹底相符,由於 32 位 linux 下的進程用戶空間是 3G 的大小,也就是 3072M,用 3072M 除以 8M 得 384,可是實際上代碼段和數據段等還要佔用一些空間,這個值應該向下取整到 383,再減去主線程,獲得 382。
那爲何 linuxthreads 上還要少一個線程呢?這可太對了,由於 linuxthreads 還須要一個管理線程
http://www.cnblogs.com/roucheng/
爲了突破內存的限制,能夠有兩種方法
1) 用 ulimit -s 1024 減少默認的棧大小
2) 調用 pthread_create 的時候用 pthread_attr_getstacksize 設置一個較小的棧大小
要注意的是,即便這樣的也沒法突破 1024 個線程的硬限制,除非從新編譯 C 庫
相關內容:
1、2.4內核與2.6內核的主要區別MySQL服務器的線程數須要在一個合理的範圍以內,這樣才能保證MySQL服務器健康平穩地運行。Threads_created表示建立過的線程數,經過查看Threads_created就能夠查看MySQL服務器的進程狀態。
若是咱們在MySQL服務器配置文件中設置了thread_cache_size,當客戶端斷開以後,服務器處理此客戶的線程將會緩存起來以響應下一個客戶而不是銷燬(前提是緩存數未達上限)。
Threads_created表示建立過的線程數,若是發現Threads_created值過大的話,代表MySQL服務器一直在建立線程,這也是比較耗資源,能夠適當增長配置文件中thread_cache_size值,查詢服務器
thread_cache_size配置:
有些時候須要確實進程內部當前運行着多少線程,那麼如下幾個方法值得一用。
1.根據進程號進行查詢:
# pstree -p 進程號
# top -Hp 進程號
2.根據進程名字進行查詢:
# pstree -p `ps -e | grep server | awk '{print $$1}'`
# pstree -p `ps -e | grep server | awk '{print $$1}'` | wc -l
這裏利用了管道和命令替換,
關於命令替換,我也是今天才瞭解,就是說用``括起來的命令會優先執行,而後以其輸出做爲其餘命令的參數,
上述就是用 ps -e | grep server | awk '{print $$1}' 的輸出(進程號),做爲 pstree -p 的參數
管道和命令替換的區別是:
管道:管道符號"|"左邊命令的輸出做爲右邊命令的輸入
命令替換:將命令替換符"``"中命令的輸出做爲其餘命令相應位置的參數
pslist是用命令行查看線程;ProcessExplorer是圖形化的查看線程,都在附件中。
1.查看進程
tasklist
or pslist -t
Name Pid Pri Thd Hnd VM WS Priv
Idle 0 0 2 0 0 28 0
System 4 8 69 1222 1824 308 0
smss 832 11 3 20 3748 408 172
csrss 900 13 12 807 72428 16152 2568
winlogon 924 13 21 516 61272 4704 8536
services 968 9 15 280 22556 4516 1868
avp 256 8 36 7185 190528 22332 50308
explorer 2060 8 16 575 122880 13400 17752
msnmsgr 1604 8 33 778 222560 19240 32792
cmd 3680 8 1 31 31084 3004 2164
pslist 5476 13 2 91 30500 2744 1236
notepad 4276 8 1 45 33692 3956 1344
IEXPLORE 5184 8 61 2143 403392 31236 105436
eclipse 6088 8 1 33 29884 3184 960
javaw 4484 8 40 1197 729124 139424 193496
javaw 4252 8 11(十一個線程) 310 187820 8080 13908
2.查看進程中的線程 http://technet.microsoft.com/en-us/sysinternals/bb896682.aspx
pslist -dmx 4252
Name Pid VM WS Priv Priv Pk Faults NonP Page
javaw 4252 202224 21848 23968 24476 7927 4 47
Tid Pri Cswtch State User Time Kernel Time Elapsed Time
5428 8 2617 Wait:UserReq 0:00:01.312 0:00:00.515 0:06:41.625
5312 15 614 Wait:UserReq 0:00:00.078 0:00:00.000 0:06:41.484
1380 15 7 Wait:UserReq 0:00:00.000 0:00:00.000 0:06:41.468
2012 10 7 Wait:UserReq 0:00:00.000 0:00:00.000 0:06:41.468
3876 9 1037 Wait:UserReq 0:00:00.046 0:00:00.187 0:06:41.187
5884 9 65 Wait:UserReq 0:00:00.000 0:00:00.015 0:06:41.187
4444 10 236 Wait:UserReq 0:00:00.000 0:00:00.015 0:06:41.171
4564 15 12 Wait:UserReq 0:00:00.000 0:00:00.000 0:06:40.953
4644 15 270 Wait:UserReq 0:00:00.234 0:00:00.015 0:06:40.953
4292 8 5 Wait:UserReq 0:00:00.000 0:00:00.000 0:06:40.953
5964 15 6422 Wait:DelayExec 0:00:00.000 0:00:00.000 0:06:40.937
pslist exp | would show statistics for all the processes that start with "exp", which would include Explorer. |
-d | Show thread detail. |
-m | Show memory detail. |
-x | Show processes, memory information and threads. |
-t | Show process tree. |
-s [n] | Run in task-manager mode, for optional seconds specified. Press Escape to abort. |
-r n | Task-manager mode refresh rate in seconds (default is 1). |
\\computer | Instead of showing process information for the local system, PsList will show information for the NT/Win2K system specified. Include the -u switch with a username and password to login to the remote system if your security credentials do not permit you to obtain performance counter information from the remote system. |
-u | username If you want to kill a process on a remote system and the account you are executing in does not have administrative privileges on the remote system then you must login as an administrator using this command-line option. If you do not include the password with the -p option then PsList will prompt you for the password without echoing your input to the display. |
-p | password This option lets you specify the login password on the command line so that you can use PsList from batch files. If you specify an account name and omit the -p option PsList prompts you interactively for a password. |
name | Show information about processes that begin with the name specified. |
-e | Exact match the process name. |
pid | Instead of listing all the running processes in the system, this parameter narrows PsList's scan to tthe process that has the specified PID. Thus: pslist 53 would dump statistics for the process with the PID 53. |
Like Windows NT/2K's built-in PerfMon monitoring tool, PsList uses the Windows NT/2K performance counters to obtain the information it displays. You can find documentation for Windows NT/2K performance counters, including the source code to Windows NT's built-in performance monitor, PerfMon, in MSDN.
All memory values are displayed in KB.
如下是非Windows系統自己附帶的外部命令,均存放於光盤 PE 系統目錄下的 System32 目錄下。
AUTORAMRESIZER.EXE 自動根據物理內存調整虛擬盤大小(PE)。
CHOICE.EXE DOS 選擇命令支持擴展
DEVCON.EXE 設備控制檯命令行工具
FINDPASS.EXE 查找系統管理員口令的命令行工具(可能有病毒虛警)
FPORT.EXE TCP/IP與端口檢測工具
HWPnp.exe 從新檢測即插即用硬件的實用工具,可激活移動存儲器等
KEYBOARD.EXE 更改鍵盤區域屬性的命令行工具
KEYDOWN.EXE 檢測鍵盤按鍵的命令行工具
NC.EXE 大名鼎鼎的網絡強力命令行工具!
NETCFG.EXE Windows PE 環境的網絡配置命令行工具
PASSWDRENEW.EXE Windows 口令離線修改工具
PENETCFG.EXE 牛人編寫的 PE 網絡環境配置工具
PSINFO.EXE 本地和遠程系統信息檢測命令行工具
PSKILL.EXE 結束本地或遠程進程的命令行工具
PSLIST.EXE 系統進程查看工具
PSPASSWD.EXE 更改本地或遠程系統口令命令行工具
PSSERVICE.EXE 管理系統服務的命令行工具
PULIST.EXE 系統進程列表查看
TCPVCON.EXE 查看活動進程的TCP鏈接狀態
TFTPD32.EXE 簡單的 TFTP 工具
WGET.EXE 功能強大的命令行下載工具
XCACLS.EXE 文件及目錄訪問控制列表的命令行增強工具
XNVIEW.EXE 袖珍圖像查看工具(小巧夠用,不需升級)
一、總結系統限制有:
/proc/sys/kernel/pid_max #查系統支持的最大線程數,通常會很大,至關於理論值
/proc/sys/kernel/thread-max
max_user_process(ulimit -u) #系統限制某用戶下最多能夠運行多少進程或線程
/proc/sys/vm/max_map_count
硬件內存大小
二、Java虛擬機自己限制:
-Xms #intial java heap size
-Xmx #maximum java heap size
-Xss #the stack size for each thread
三、查詢當前某程序的線程或進程數
pstree -p `ps -e | grep java | awk '{print $1}'` | wc -l
或
pstree -p 3660 | wc -l
四、查詢當前整個
系統已用的線程或進程數
pstree -p | wc -l
一、 cat /proc/${pid}/status
二、pstree -p ${pid}
三、top -p ${pid} 再按H 或者直接輸入 top -bH -d 3 -p ${pid}
top -H
手冊中說:-H : Threads toggle
加上這個選項啓動top,top一行顯示一個線程。不然,它一行顯示一個進程。
四、ps xH
手冊中說:H Show threads as if they were processes
這樣能夠查看全部存在的線程。
五、ps -mp <PID>
手冊中說:m Show threads after processes
這樣能夠查看一個進程起的線程數。
一、總結系統限制有:/proc/sys/kernel/pid_max #查系統支持的最大線程數,通常會很大,至關於理論值/proc/sys/kernel/thread-maxmax_user_process(ulimit -u) #系統限制某用戶下最多能夠運行多少進程或線程/proc/sys/vm/max_map_count硬件內存大小二、Java虛擬機自己限制:-Xms #intial java heap size-Xmx #maximum java heap size-Xss #the stack size for each thread三、查詢當前某程序的線程或進程數pstree -p ps -e | grep java | awk '{print $1}' | wc -l或pstree -p 3660 | wc -l四、查詢當前整個系統已用的線程或進程數pstree -p | wc -l一、 cat /proc/${pid}/status二、pstree -p ${pid}三、top -p ${pid} 再按H 或者直接輸入 top -bH -d 3 -p ${pid}top -H手冊中說:-H : Threads toggle加上這個選項啓動top,top一行顯示一個線程。不然,它一行顯示一個進程。四、ps xH手冊中說:H Show threads as if they were processes這樣能夠查看全部存在的線程。五、ps -mp <PID>手冊中說:m Show threads after processes這樣能夠查看一個進程起的線程數。