LNMP 中常用的 Linux 命令

目录

ps:报告当前系统的进程状态

ps 命令用于报告当前系统的进程状态。可以搭配 kill 命令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

ps 语法

1
ps (选项)

ps 选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
a 显示所有进程
-a 显示同一终端下的所有程序
-A 显示所有进程
c 显示进程的真实名称
-N 反向选择
-e 等于“-A”
e 显示环境变量
f 显示程序间的关系
-H 显示树状结构
r 显示当前终端的进程
T 显示当前终端的所有程序
u 指定用户的所有进程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
--help 显示帮助信息
--version 显示版本显示

ps 实例

ps 这个命令的结果一般会很长,为了便于查看,可以结合 less 命令和管道来使用

显示所有进程信息:ps -A
1
2
3
4
5
6
7
8
9
10
PID TTY TIME CMD
1 ?? 0:09.53 /sbin/launchd
49 ?? 0:00.65 /usr/sbin/syslogd
50 ?? 0:01.81 /usr/libexec/UserEventAgent (System)
52 ?? 0:00.17 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld
53 ?? 0:03.00 /usr/libexec/kextd
54 ?? 0:02.52 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framewor
56 ?? 0:00.16 /System/Library/PrivateFrameworks/MediaRemote.framework/Support/mediaremoted
60 ?? 0:00.21 /System/Library/CoreServices/appleeventsd --server
61 ?? 0:01.16 /usr/libexec/configd
显示指定用户进程信息:ps -u LuisEdware
1
2
3
4
5
6
7
8
9
UID PID TTY TIME CMD
501 297 ?? 0:00.58 /usr/libexec/UserEventAgent (Aqua)
501 299 ?? 0:04.05 /usr/sbin/distnoted agent
501 301 ?? 0:00.98 /usr/sbin/cfprefsd agent
501 302 ?? 0:00.96 /System/Library/Frameworks/CoreTelephony.framework/Support/CommCenter -L
501 304 ?? 0:03.09 /usr/libexec/trustd --agent
501 305 ?? 0:00.65 /usr/libexec/lsd
501 307 ?? 0:01.31 /usr/sbin/usernoted
501 311 ?? 0:00.43 /usr/libexec/sharingd
查找进程并显示进程所有信息::ps -ef | grep httpd
1
2
3
4
5
6
7
8
9
10
11
0 1825 1 0 8:43上午 ?? 0:00.16 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1876 1825 0 8:43上午 ?? 0:01.11 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1877 1825 0 8:43上午 ?? 0:00.25 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1878 1825 0 8:43上午 ?? 0:00.17 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1879 1825 0 8:43上午 ?? 0:00.18 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1880 1825 0 8:43上午 ?? 0:00.26 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1992 1825 0 8:46上午 ?? 0:00.16 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1995 1825 0 8:46上午 ?? 0:00.25 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1996 1825 0 8:46上午 ?? 0:00.16 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 1997 1825 0 8:46上午 ?? 0:00.30 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
1 2038 1825 0 8:55上午 ?? 0:00.19 /usr/local/Cellar/httpd24/2.4.25/bin/httpd -k start
将目前属于自己这次登入的 PID 与相关信息列示出来:ps -l
1
2
3
4
5
6
7
8
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 911 909 4006 0 31 0 2481960 2976 - Ss 0 ttys000 0:00.04 /Users/LuisE
501 913 912 4006 0 31 0 2461752 1624 - S 0 ttys000 0:00.34 -zsh
501 1624 913 4006 0 31 0 3129968 15188 - S+ 0 ttys000 0:01.39 npm
501 1752 1624 4006 0 31 0 3382196 268376 - S+ 0 ttys000 39:16.48 node build/d
501 1816 1752 4006 0 31 0 2500188 3920 - S+ 0 ttys000 0:00.07 open -W http
501 1625 909 4006 0 31 0 2481960 3044 - Ss 0 ttys001 0:00.04 /Users/LuisE
501 1627 1626 4006 0 31 0 2462840 4408 - S 0 ttys001 0:00.47 -zsh
列出目前所有的正在内存当中的程序:ps aux
1
2
3
4
5
6
7
8
9
10
11
12
13
14
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
LuisEdware 1752 62.5 3.2 3382196 268440 s000 S+ 8:42上午 40:41.18 node build/dev-server.js
LuisEdware 899 4.9 2.9 4328408 243804 ?? S 8:39上午 4:44.41 /Applications/QQ.app/Contents/MacOS/QQ
_windowserver 194 3.2 1.4 4104716 121620 ?? Ss 8:30上午 6:44.72 /System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServer -daemon
LuisEdware 909 2.6 0.9 3843120 75844 ?? S 8:42上午 1:05.74 /Users/LuisEdware/Applications/iTerm.app/Contents/MacOS/iTerm2
LuisEdware 2281 1.5 4.1 4300024 343468 ?? S 9:14上午 1:57.11 /Applications/NeteaseMusic.app/Contents/MacOS/NeteaseMusic
_coreaudiod 214 0.7 0.1 2474372 8044 ?? Ss 8:30上午 0:19.79 /usr/sbin/coreaudiod
root 1 0.3 0.2 2492048 12796 ?? Ss 8:30上午 0:12.43 /sbin/launchd
root 93 0.3 0.1 2511440 12104 ?? Ss 8:30上午 0:03.20 /usr/libexec/opendirectoryd
root 118 0.3 0.0 2470524 2016 ?? Ss 8:30上午 0:02.05 /usr/sbin/notifyd
LuisEdware 2219 0.2 1.6 3206280 132620 ?? S 8:58上午 0:28.23 /Applications/Sublime Text.app/Contents/MacOS/plugin_host 2218
LuisEdware 407 0.2 0.4 2687024 32212 ?? R 8:30上午 0:04.06 /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
LuisEdware 665 0.1 0.5 2717352 41656 ?? S 8:30上午 0:21.83 /Applications/MacPomodoroTimer.app/Contents/MacOS/MacPomodoroTimer -psn_0_254014
LuisEdware 2218 0.1 2.3 4088360 195860 ?? S 8:58上午 1:19.86 /Applications/Sublime Text.app/Contents/MacOS/Sublime Text
根据 CPU 使用来升序排序:ps -aux --sort -pcpu
1
2
3
4
5
6
7
8
9
10
11
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
redis 1296 0.1 0.5 142692 5596 ? Ssl 3月30 100:40 /usr/bin/redis-server 127.0.0.1:6379
root 17921 0.1 1.3 125652 13828 ? Ssl 6月05 1:57 /usr/local/aegis/aegis_client/aegis_10_23/AliYunDun
root 1 0.0 0.2 190544 2772 ? Ss 3月30 3:18 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 3月30 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 3月30 0:07 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 3月30 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 3月30 0:17 [kworker/u30:0]
root 7 0.0 0.0 0 0 ? S 3月30 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 3月30 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 3月30 29:07 [rcu_sched]
根据内存使用来升序排序:ps -aux --sort -pmem
1
2
3
4
5
6
7
8
9
10
11
12
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
mysql 1071 0.0 10.1 1197928 102632 ? Sl 3月30 41:46 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 335 0.0 4.2 106532 42852 ? Ss 3月30 1:13 /usr/lib/systemd/systemd-journald
git 1322 0.0 3.1 200676 31512 ? Sl 3月30 13:14 /home/git/gogs/gogs web
www 5099 0.0 2.1 430056 22168 ? S 5月30 0:20 php-fpm: pool www
www 5097 0.0 2.1 430056 22164 ? S 5月30 0:21 php-fpm: pool www
www 5098 0.0 2.1 430056 22144 ? S 5月30 0:21 php-fpm: pool www
www 7762 0.0 2.1 430056 22116 ? S 5月31 0:19 php-fpm: pool www
root 797 0.0 2.1 514268 21916 ? Ssl 3月30 0:25 /usr/sbin/rsyslogd -n
www 5100 0.0 1.9 428008 20060 ? S 5月30 0:20 php-fpm: pool www
www 5096 0.0 1.9 428032 20044 ? S 5月30 0:20 php-fpm: pool www
root 5094 0.0 1.3 418136 13832 ? Ss 5月30 0:31 php-fpm: master process (/etc/php-fpm.conf)

ps 输出列信息

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
F 代表当前进程的旗标 (flag), 4 代表使用者为 Super User
S 代表当前进程的状态 (STAT),关于各 STAT 的意义将在内文介绍
PRI 优先执行等级
NI 当前是 Nice 值,在下一小节我们会持续介绍
ADDR 当前进程所在的内存位置。如果是个 Running 的程序,一般就是 "-"
USER 该进程属于那个使用者账号的
PID 该进程的 ID
PPID 当前进程的父级进程的 ID
C 当前进程使用 CPU 资源的百分比
%CPU 当前进程使用 CPU 资源的百分比
SZ 当前进程使用内存资源的大小
%MEM 当前进程所占用的物理内存百分比
VSZ 当前进程使用掉的虚拟内存量 (Kbytes)
RSS 当前进程占用的固定的内存量 (Kbytes)
TTY 当前进程是在哪个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT 当前进程目前的状态,主要的状态有
R 当前进程目前正在运作,或者是可被运作
S 当前进程目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T 当前进程目前正在侦测或者是停止了
Z 当前进程应该已经终止,但是其父进程却无法正常的终止他,造成 zombie (疆尸) 进程的状态
STARTED 当前进程被触发启动的时间
TIME 当前进程实际使用 CPU 运作的时间
CMD 当前进程所运行的命令
COMMAND 当前进程所运行的命令
WCHAN 判断当前进程是否在运作,若为 - 表示正在运作

lsof:显示Linux系统当前已打开的所有文件列表

lsof 命令用于查看你进程开打的文件、打开文件的进程,进程打开的端口(TCP、UDP)、找回/恢复删除的文件,是十分方便的系统监视工具,因为 lsof 命令需要访问核心内存和各种文件,所以需要 root 用户执行。

在 Linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过 lsof 工具能够查看这个列表对系统监测以及排错将是很有帮助的。

lsof 语法

1
lsof (选项)

lsof 选项

1
2
3
4
5
6
7
8
9
10
11
12
-a 列出打开文件存在的进程;
-c<进程名> 列出指定进程所打开的文件;
-g 列出GID号进程详情;
-d<文件号> 列出占用该文件号的进程;
+d<目录> 列出目录下被打开的文件;
+D<目录> 递归列出目录下被打开的文件;
-n<目录> 列出使用NFS的文件;
-i<条件> 列出符合条件的进程;
-p<进程号> 列出指定进程号所打开的文件;
-u 列出UID号进程详情;
-h 显示帮助信息;
-v 显示版本信息。

lsof 实例

查找某个文件相关的进程:lsof /bin/bash
1
2
3
4
[root@git ~]lsof /bin/bash
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld_sa 898 mysql txt REG 202,1 960472 397902 /usr/bin/bash
bash 20116 root txt REG 202,1 960472 397902 /usr/bin/bash
列出某个用户打开的文件信息:lsof -u git
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@git ~]lsof -u git
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gogs 1322 git cwd DIR 202,1 4096 268706 /home/git/gogs
gogs 1322 git rtd DIR 202,1 4096 2 /
gogs 1322 git txt REG 202,1 31081412 268950 /home/git/gogs/gogs
gogs 1322 git mem REG 202,1 23968 401117 /usr/lib64/libcap-ng.so.0.0.0
gogs 1322 git mem REG 202,1 122936 398733 /usr/lib64/libaudit.so.1.0.0
gogs 1322 git mem REG 202,1 2118128 398763 /usr/lib64/libc-2.17.so
gogs 1322 git mem REG 202,1 61672 401115 /usr/lib64/libpam.so.0.83.1
gogs 1322 git mem REG 202,1 143944 399086 /usr/lib64/libpthread-2.17.so
gogs 1322 git mem REG 202,1 19776 401099 /usr/lib64/libdl-2.17.so
gogs 1322 git mem REG 202,1 155464 397967 /usr/lib64/ld-2.17.so
gogs 1322 git 0r CHR 1,3 0t0 4913 /dev/null
gogs 1322 git 1w REG 202,1 101689 266937 /home/git/gogs/log/gogs.log.2017-03-30
gogs 1322 git 2w REG 202,1 101689 266937 /home/git/gogs/log/gogs.log.2017-03-30
gogs 1322 git 3w REG 202,1 15097 272572 /home/git/gogs/log/gogs.log
gogs 1322 git 4u REG 202,1 0 268956 /home/git/gogs/log/xorm.log
gogs 1322 git 5u IPv6 16091 0t0 TCP *:hbci (LISTEN)
gogs 1322 git 6u a_inode 0,9 0 4909 [eventpoll]
gogs 1322 git 9u IPv4 3291232 0t0 TCP localhost:53538->localhost:mysql (ESTABLISHED)
gogs 1322 git 10r CHR 1,9 0t0 4918 /dev/urandom
gogs 1322 git 12u IPv4 2948194 0t0 TCP localhost:46354->localhost:mysql (ESTABLISHED)
列出某个程序进程所打开的文件信息:lsof -c php-fpm | less
1
2
3
4
5
6
7
8
9
10
11
12
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 5094 root cwd DIR 202,1 4096 2 /
php-fpm 5094 root rtd DIR 202,1 4096 2 /
php-fpm 5094 root txt REG 202,1 4826352 267066 /usr/sbin/php-fpm
php-fpm 5094 root mem REG 202,1 62184 399121 /usr/lib64/libnss_files-2.17.so
php-fpm 5094 root mem REG 202,1 87392 789157 /usr/lib64/php/modules/sockets.so
php-fpm 5094 root mem REG 202,1 315464 789173 /usr/lib64/php/modules/soap.so
php-fpm 5094 root mem REG 202,1 58400 789156 /usr/lib64/php/modules/simplexml.so
php-fpm 5094 root mem REG 202,1 15664 789155 /usr/lib64/php/modules/shmop.so
php-fpm 5094 root mem REG 202,1 469616 789206 /usr/lib64/php/modules/redis.so
php-fpm 5094 root mem REG 202,1 32920 789199 /usr/lib64/php/modules/posix.so
php-fpm 5094 root mem REG 202,1 268096 789154 /usr/lib64/php/modules/phar.so
列出某个用户以及某个进程所打开的文件信息lsof -u git -c mysql | less
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
mysqld 1071 mysql 22u REG 202,1 5120 1181363 /var/lib/mysql/mysql/proxies_priv.MYI
mysqld 1071 mysql 23u REG 202,1 1386 1181364 /var/lib/mysql/mysql/proxies_priv.MYD
mysqld 1071 mysql 24u REG 202,1 4096 1181312 /var/lib/mysql/mysql/tables_priv.MYI
mysqld 1071 mysql 25u REG 202,1 0 1181313 /var/lib/mysql/mysql/tables_priv.MYD
mysqld 1071 mysql 26u REG 202,1 4096 1181315 /var/lib/mysql/mysql/columns_priv.MYI
mysqld 1071 mysql 27u REG 202,1 0 1181316 /var/lib/mysql/mysql/columns_priv.MYD
mysqld 1071 mysql 28u REG 202,1 4096 1181348 /var/lib/mysql/mysql/procs_priv.MYI
mysqld 1071 mysql 29u REG 202,1 0 1181349 /var/lib/mysql/mysql/procs_priv.MYD
mysqld 1071 mysql 30u REG 202,1 1024 1181309 /var/lib/mysql/mysql/servers.MYI
mysqld 1071 mysql 31u REG 202,1 0 1181310 /var/lib/mysql/mysql/servers.MYD
mysqld 1071 mysql 32u REG 202,1 2048 1181357 /var/lib/mysql/mysql/event.MYI
mysqld 1071 mysql 33u REG 202,1 0 1181358 /var/lib/mysql/mysql/event.MYD
mysqld 1071 mysql 36u IPv4 3291234 0t0 TCP localhost:mysql->localhost:53538 (ESTABLISHED)
mysqld 1071 mysql 38u IPv4 2948195 0t0 TCP localhost:mysql->localhost:46354 (ESTABLISHED)
gogs 1322 git cwd DIR 202,1 4096 268706 /home/git/gogs
gogs 1322 git rtd DIR 202,1 4096 2 /
gogs 1322 git txt REG 202,1 31081412 268950 /home/git/gogs/gogs
gogs 1322 git mem REG 202,1 23968 401117 /usr/lib64/libcap-ng.so.0.0.0
gogs 1322 git mem REG 202,1 122936 398733 /usr/lib64/libaudit.so.1.0.0
gogs 1322 git mem REG 202,1 2118128 398763 /usr/lib64/libc-2.17.so
gogs 1322 git mem REG 202,1 61672 401115 /usr/lib64/libpam.so.0.83.1
gogs 1322 git mem REG 202,1 143944 399086 /usr/lib64/libpthread-2.17.so
gogs 1322 git mem REG 202,1 19776 401099 /usr/lib64/libdl-2.17.so
gogs 1322 git mem REG 202,1 155464 397967 /usr/lib64/ld-2.17.so
gogs 1322 git 0r CHR 1,3 0t0 4913 /dev/null
gogs 1322 git 1w REG 202,1 101689 266937 /home/git/gogs/log/gogs.log.2017-03-30
通过某个进程号显示该进程打开的文件:lsof -p 5086
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@git ~]lsof -p 5086
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5086 nginx cwd DIR 202,1 4096 2 /
nginx 5086 nginx rtd DIR 202,1 4096 2 /
nginx 5086 nginx txt REG 202,1 1101400 266975 /usr/sbin/nginx
nginx 5086 nginx mem REG 202,1 23976 658526 /usr/lib64/perl5/vendor_perl/auto/nginx/nginx.so
nginx 5086 nginx mem REG 202,1 80440 402994 /usr/lib64/nginx/modules/ngx_stream_module.so
nginx 5086 nginx mem REG 202,1 101176 402993 /usr/lib64/nginx/modules/ngx_mail_module.so
nginx 5086 nginx mem REG 202,1 19384 399089 /usr/lib64/libgpg-error.so.0.10.0
nginx 5086 nginx mem REG 202,1 534768 401338 /usr/lib64/libgcrypt.so.11.8.2
nginx 5086 nginx mem REG 202,1 157424 399152 /usr/lib64/liblzma.so.5.2.2
nginx 5086 nginx mem REG 202,1 87368 402949 /usr/lib64/libexslt.so.0.8.17
nginx 5086 nginx mem REG 202,1 258344 402952 /usr/lib64/libxslt.so.1.1.28
nginx 5086 nginx mem REG 202,1 1509376 398848 /usr/lib64/libxml2.so.2.9.1
nginx 5086 nginx mem REG 202,1 24560 402989 /usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so
列出所有的网络连接:lsof -i
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
[root@git ~]lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 424 ntp 16u IPv4 11419 0t0 UDP *:ntp
ntpd 424 ntp 17u IPv6 11581 0t0 UDP *:ntp
ntpd 424 ntp 18u IPv4 11693 0t0 UDP localhost:ntp
ntpd 424 ntp 20u IPv4 12594 0t0 UDP iZ94yebfltlZ:ntp
ntpd 424 ntp 21u IPv4 14475 0t0 UDP git.cowcat.cc:ntp
sshd 821 root 3u IPv4 13479 0t0 TCP *:ssh (LISTEN)
mysqld 1071 mysql 14u IPv4 14746 0t0 TCP *:mysql (LISTEN)
mysqld 1071 mysql 36u IPv4 3291234 0t0 TCP localhost:mysql->localhost:53538 (ESTABLISHED)
mysqld 1071 mysql 38u IPv4 2948195 0t0 TCP localhost:mysql->localhost:46354 (ESTABLISHED)
beanstalk 1284 beanstalkd 3u IPv4 15728 0t0 TCP *:11300 (LISTEN)
redis-ser 1296 redis 4u IPv4 15883 0t0 TCP localhost:6379 (LISTEN)
gogs 1322 git 5u IPv6 16091 0t0 TCP *:hbci (LISTEN)
gogs 1322 git 9u IPv4 3291232 0t0 TCP localhost:53538->localhost:mysql (ESTABLISHED)
gogs 1322 git 12u IPv4 2948194 0t0 TCP localhost:46354->localhost:mysql (ESTABLISHED)
nginx 5085 root 10u IPv4 3027466 0t0 TCP *:http (LISTEN)
nginx 5085 root 11u IPv6 3027467 0t0 TCP *:http (LISTEN)
nginx 5086 nginx 10u IPv4 3027466 0t0 TCP *:http (LISTEN)
nginx 5086 nginx 11u IPv6 3027467 0t0 TCP *:http (LISTEN)
php-fpm 5094 root 6u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5096 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5097 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5098 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5099 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5100 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
列出所有 TCP 网络连接信息:lsof -i tcp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@git ~]lsof -i tcp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 821 root 3u IPv4 13479 0t0 TCP *:ssh (LISTEN)
mysqld 1071 mysql 14u IPv4 14746 0t0 TCP *:mysql (LISTEN)
mysqld 1071 mysql 36u IPv4 3291234 0t0 TCP localhost:mysql->localhost:53538 (ESTABLISHED)
mysqld 1071 mysql 38u IPv4 2948195 0t0 TCP localhost:mysql->localhost:46354 (ESTABLISHED)
beanstalk 1284 beanstalkd 3u IPv4 15728 0t0 TCP *:11300 (LISTEN)
redis-ser 1296 redis 4u IPv4 15883 0t0 TCP localhost:6379 (LISTEN)
gogs 1322 git 5u IPv6 16091 0t0 TCP *:hbci (LISTEN)
gogs 1322 git 9u IPv4 3291232 0t0 TCP localhost:53538->localhost:mysql (ESTABLISHED)
gogs 1322 git 12u IPv4 2948194 0t0 TCP localhost:46354->localhost:mysql (ESTABLISHED)
nginx 5085 root 10u IPv4 3027466 0t0 TCP *:http (LISTEN)
nginx 5085 root 11u IPv6 3027467 0t0 TCP *:http (LISTEN)
nginx 5086 nginx 10u IPv4 3027466 0t0 TCP *:http (LISTEN)
nginx 5086 nginx 11u IPv6 3027467 0t0 TCP *:http (LISTEN)
php-fpm 5094 root 6u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5096 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5097 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5098 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5099 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 5100 www 0u IPv4 3027595 0t0 TCP localhost:cslistener (LISTEN)
列出谁在使用某个端口:lsof -i
1
2
3
4
5
6
7
[root@git ~]lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1071 mysql 14u IPv4 14746 0t0 TCP *:mysql (LISTEN)
mysqld 1071 mysql 36u IPv4 3291234 0t0 TCP localhost:mysql->localhost:53538 (ESTABLISHED)
mysqld 1071 mysql 38u IPv4 2948195 0t0 TCP localhost:mysql->localhost:46354 (ESTABLISHED)
gogs 1322 git 9u IPv4 3291232 0t0 TCP localhost:53538->localhost:mysql (ESTABLISHED)
gogs 1322 git 12u IPv4 2948194 0t0 TCP localhost:46354->localhost:mysql (ESTABLISHED)
列出某个用户的所有活跃的网络端口:lsof -a -u git -i
1
2
3
4
5
[root@git ~]lsof -a -u git -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gogs 1322 git 5u IPv6 16091 0t0 TCP *:hbci (LISTEN)
gogs 1322 git 9u IPv4 3291232 0t0 TCP localhost:53538->localhost:mysql (ESTABLISHED)
gogs 1322 git 12u IPv4 2948194 0t0 TCP localhost:46354->localhost:mysql (ESTABLISHED)
根据文件描述列出对应的文件信息:lsof -d 1
1
2
3
4
5
6
7
8
9
[root@git ~]lsof -d 1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 1u CHR 1,3 0t0 4913 /dev/null
systemd-j 335 root 1w CHR 1,3 0t0 4913 /dev/null
systemd-u 353 root 1u unix 0xffff8800365cdc00 0t0 10448 socket
systemd-l 420 root 1u unix 0xffff880036f57c00 0t0 11213 socket
dbus-daem 423 dbus 1u unix 0xffff88003a1c4800 0t0 11275 socket
ntpd 424 ntp 1u CHR 1,3 0t0 4913 /dev/null
crond 430 root 1u unix 0xffff88003b0d9800 0t0 11872 socket

lsof 输出列信息

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
45
46
47
48
49
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等:
cwd:表示 current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
lnn:library references (AIX);
er:FD information error (see NAME column);
jld:jail directory (FreeBSD);
ltx:shared library text (code and data);
mxx :hex memory-mapped type number xx.
m86:DOS Merge mapped file;
mem:memory-mapped file;
mmap:memory-mapped device;
pd:parent directory;
rtd:root directory;
tr:kernel trace file (OpenBSD);
v86 VP/ix mapped file;
0:表示标准输入
1:表示标准输出
2:表示标准错误,一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
u:表示该文件被打开并处于读取/写入模式
r:表示该文件被打开并处于只读模式
w:表示该文件被打开并处于
空格:表示该文件的状态模式为 unknow,且没有锁定
-:表示该文件的状态模式为 unknow,且被锁定,同时在文件状态模式后面,还跟着相关的锁
N:for a Solaris NFS lock of unknown type;
r:for read lock on part of the file;
R:for a read lock on the entire file;
w:for a write lock on part of the file;(文件的部分写锁)
W:for a write lock on the entire file;(整个文件的写锁)
u:for a read and write lock of any length;
U:for a lock of unknown type;
x:for an SCO OpenServer Xenix lock on part of the file;
X:for an SCO OpenServer Xenix lock on the entire file;
space:if there is no lock.
TYPE:文件类型,如 DIR、REG 等,常见的文件类型:
DIR:表示目录
CHR:表示字符类型
BLK:块设备类型
UNIX: UNIX 域套接字
FIFO:先进先出 (FIFO) 队列
IPv4:网际协议 (IP) 套接字
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

top:显示或管理执行中的程序

top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过 top 命令所提供的互动式界面,用热键可以管理。

top 语法

1
top (选项)

top 选项

1
2
3
4
5
6
7
8
9
10
-b 以批处理模式操作
-c 显示完整的治命令
-d 屏幕刷新间隔时间
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数

top 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
top - 17:20:24 up 69 days, 23:59, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 104 total, 1 running, 103 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1014984 total, 82768 free, 619980 used, 312236 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 233544 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5788 root 20 0 157576 2164 1532 R 0.3 0.2 0:00.03 top
1 root 20 0 190544 2764 1588 S 0.0 0.3 3:25.26 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:08.42 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:18.55 kworker/u30:0

top 输出列信息

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
top - 17:20:24 当前系统时间
up 69 days, 23:59 系统已经运行了 69 天 23 小时 59 分
1 user 当前系统在线用户人数
load average: 0.00, 系统负载
0.01,
0.05
Tasks: 104 total 总进程数
1 running 正在运行的进程数
103 sleeping 正在休眠的进程数
0 stopped 停止运行的进程数
0 zombie 已经僵死的进程数
Cpu(s): 0.0 us 用户空间占用 CPU 百分比
0.3 sy 内核空间占用 CPU 百分比
0.0 ni 用户进程空间内改变过优先级的进程占用 CPU 百分比
99.7 id 空闲 CPU 百分比
0.0 wa 等待 I/O 的 CPU 时间百分比
0.0 hi CPU 硬中断时间百分比
0.0 si CPU 软中断时间百分比
0.0 st
KiB Mem : 1014984 total 物理内存总量
82768 free 空闲内存总量
619980 used 使用中的物理内存总量
312236 buff/cache 用作内核缓存的内存量
KiB Swap: 0 total, 交换区总量
0 free, 空闲交换区总量
0 used. 使用的交换区总量
233544 avail Mem 缓冲的交换区总量
PID 进程ID
USER 进程所有者
PR 进程优先级,越小越优先执行
NI
VIRT 进程占用的虚拟内存
RES 进程占用的物理内存
SHR 进程使用的共享内存
S 进程的状态。S 表示休眠,R 表示正在运行,Z 表示僵死状态,N 表示该进程优先值为负数
%CPU 进程占用 CPU 的使用率
%MEM 进程使用的物理内存和总内存的百分比
TIME+ 该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND 进程启动命令名称

top 交互命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
h 显示帮助画面,给出一些简短的命令总结说明;
k 终止一个进程;
i 忽略闲置和僵死进程,这是一个开关式命令;
q 退出程序;
r 重新安排一个进程的优先级别;
S 切换到累计模式;
s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f 或者 F 从当前显示中添加或者删除项目;
o 或者 O 变显示项目的顺序;
l 切换显示平均负载和启动时间信息;
m 切换显示内存信息;
t 切换显示进程和CPU状态信息;
c 切换显示命令名称和完整命令行;
M 根据驻留内存大小进行排序;
P 根据CPU使用百分比大小进行排序;
T 根据时间/累计时间进行排序;
w 将当前设置写入~/.toprc文件中。

vmstat:显示虚拟内存状态

vmstat 命令的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。

语法

1
vmstat(选项)(参数)

选项

1
2
3
4
5
6
7
8
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位。

参数

  • 事件间隔:状态信息刷新的时间间隔
  • 次数:显示报告的次数

实例

1
2
3
4
5
6
7
8
9
10
[root@git ~]# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 260224 123132 367448 0 0 0 2 7 5 0 0 100 0 0
0 0 0 260224 123132 367480 0 0 0 0 141 291 0 0 100 0 0
0 0 0 260224 123140 367472 0 0 0 4 132 280 0 0 99 0 0
0 0 0 260224 123140 367480 0 0 0 0 155 322 1 0 99 0 0
0 0 0 260224 123140 367480 0 0 0 0 132 282 0 0 100 0 0
0 0 0 260224 123140 367480 0 0 0 0 132 279 0 0 100 0 0
0 0 0 260224 123140 367480 0 0 0 0 125 274 0 0 100 0 0

Procs(进程)

r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
b: 等待IO的进程数量。
Memory(内存)

swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
free: 空闲物理内存大小。
buff: 用作缓冲的内存大小。
cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
Swap

si: 每秒从交换区写到内存的大小,由磁盘调入内存。
so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

IO(现在的Linux版本块的大小为1kb)

bi: 每秒读取的块数
bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

system(系统)

in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

CPU(以百分比表示)

us: 用户进程执行时间百分比(user time)
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。

sy: 内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

wa: IO等待时间百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

id: 空闲时间百分比

netstat:查看Linux中网络系统状态信息

TODO

sar:系统运行状态统计工具

sar 命令是 Linux 下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar 工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。

sar 语法

1
sar(选项)(参数)

sar 选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-A:显示所有的报告信息;
-b:显示I/O速率;
-B:显示换页状态;
-c:显示进程创建活动;
-d:显示每个块设备的状态;
-e:设置显示报告的结束时间;
-f:从指定文件提取报告;
-i:设状态信息刷新的间隔时间;
-P:报告每个CPU的状态;
-R:显示内存状态;
-u:显示CPU利用率;
-v:显示索引节点,文件和其他内核表的状态;
-w:显示交换分区状态;
-x:显示给定进程的状态。

sar 参数

  • 间隔时间:每次报告的间隔时间(秒);
  • 次数:显示报告的次数。

sar 实例

ss:获取 Socket 统计信息