简述
新接手一台服务器,如何获取服务信息?接下来带你通过 PID 简单获取命令行参数、环境变量、打开的文件、内存映射、进程状态等等。
实操
以下以 MySQL 为例:
获取 PID
可通过 netstat -lntp|grep mysqld
或 ps -ef|grep mysqld
获取
# 方法 1
[root@test04 ~]# netstat -lntp|grep [m]ysqld
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::3306 :::* LISTEN 21809/mysqld # 获取到 PID 21809
# 方法 2
[root@test04 ~]# ps -ef|grep [m]ysqld
UID PID PPID C STIME TTY TIME CMD
mysql 21809 1 0 10:16 ? 00:00:02 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid # 获取到 PID 21809
进程信息简介
通过进程号 21809 查看进程信息
[root@test04 ~]# cd /proc/21809
[root@test04 21809]# ll
total 0
dr-xr-xr-x. 2 mysql mysql 0 Apr 9 10:17 attr # 进程的 SELinux 属性目录,用于存储安全上下文信息。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 autogroup # 用于自动进程组调度的文件。
-r--------. 1 mysql mysql 0 Apr 9 10:56 auxv # 包含进程的辅助向量信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:16 cgroup # 包含进程所在 cgroup 的信息。
--w-------. 1 mysql mysql 0 Apr 9 10:56 clear_refs # 用于清除进程内存页的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:17 cmdline # 包含进程的命令行参数。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:17 comm # 包含进程的命令名。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 coredump_filter # 用于控制进程核心转储的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 cpuset # 包含进程的 cpuset 信息。
lrwxrwxrwx. 1 mysql mysql 0 Apr 9 10:56 cwd -> /var/lib/mysql # 一个符号链接,指向进程的当前工作目录。
-r--------. 1 mysql mysql 0 Apr 9 10:56 environ # 包含进程环境变量的文件。
lrwxrwxrwx. 1 mysql mysql 0 Apr 9 10:36 exe -> /usr/sbin/mysqld # 一个符号链接,指向进程正在执行的可执行文件。
dr-x------. 2 mysql mysql 0 Apr 9 10:17 fd # 包含进程打开的文件描述符的目录。
dr-x------. 2 mysql mysql 0 Apr 9 10:56 fdinfo # 包含有关进程文件描述符的信息的目录。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 gid_map # 包含进程的有效组 ID 到文件系统 ID 的映射信息。
-r--------. 1 mysql mysql 0 Apr 9 10:56 io # 包含进程 I/O 统计信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 limits # 包含进程资源限制的文件。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 loginuid # 包含进程的登录用户 ID 的文件。
dr-x------. 2 mysql mysql 0 Apr 9 10:56 map_files # 包含进程映射的文件的目录。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 maps # 包含进程地址空间映射信息的文件。
-rw-------. 1 mysql mysql 0 Apr 9 10:56 mem # 包含进程内存映射的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 mountinfo # 包含进程的挂载信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 mounts # 包含进程的挂载点信息的文件。
-r--------. 1 mysql mysql 0 Apr 9 10:56 mountstats # 包含进程的挂载统计信息的文件。
dr-xr-xr-x. 5 mysql mysql 0 Apr 9 10:56 net # 包含进程网络信息的目录。
dr-x--x--x. 2 mysql mysql 0 Apr 9 10:56 ns # 包含进程命名空间信息的目录。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 numa_maps # 包含进程 NUMA 节点内存映射信息的文件。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 oom_adj # 控制进程被杀死的 OOM 分数的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 oom_score # 用于表示进程 OOM 分数的文件。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 oom_score_adj # 控制进程被杀死的 OOM 分数的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 pagemap # 包含进程页面映射信息的文件。
-r--------. 1 mysql mysql 0 Apr 9 10:56 patch_state # 包含进程的内核补丁状态的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 personality # 包含进程的人格信息的文件。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 projid_map # 包含进程的有效项目 ID 到文件系统 ID 的映射信息的文件。
lrwxrwxrwx. 1 mysql mysql 0 Apr 9 10:56 root -> / # 一个符号链接,指向根目录。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 sched # 包含进程调度策略的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 schedstat # 包含进程调度统计信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 sessionid # 包含进程会话 ID 的文件。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 setgroups # 控制进程是否可以设置附加组的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 smaps # 包含进程内存使用统计信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 stack # 包含进程栈信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:16 stat # 包含进程状态信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 statm # 包含进程内存状态信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 status # 包含进程当前状态的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 syscall # 包含进程系统调用信息的文件。
dr-xr-xr-x. 30 mysql mysql 0 Apr 9 10:56 task # 包含进程线程信息的目录。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 timers # 包含进程定时器信息的文件。
-rw-r--r--. 1 mysql mysql 0 Apr 9 10:56 uid_map # 包含进程的有效用户 ID 到文件系统 ID 的映射信息的文件。
-r--r--r--. 1 mysql mysql 0 Apr 9 10:56 wchan # 包含进程等待中的内核函数地址的文件。
进程状态简述
通过进程号 21809 查看进程状态,关键信息备注
[root@test04 21809]# cat /proc/21809/status
Name: mysqld # 进程的名称
Umask: 0026
State: S (sleeping) # 进程的状态,这里是S,表示睡眠状态(sleeping)
Tgid: 21809
Ngid: 0
Pid: 21809 # 进程的PID
PPid: 1 # 父进程的PID,这里是1,表示父进程是init进程,通常是操作系统启动时的第一个用户进程。
TracerPid: 0
Uid: 27 27 27 27 # 进程的用户ID
Gid: 27 27 27 27 # 进程的用户组ID
FDSize: 64
Groups: 27
VmPeak: 1189208 kB # 进程的虚拟内存峰值
VmSize: 1189208 kB # 虚拟内存大小
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 178504 kB
VmRSS: 178504 kB # 实际驻留内存大小
RssAnon: 170184 kB
RssFile: 8320 kB
RssShmem: 0 kB
VmData: 1129496 kB
VmStk: 132 kB
VmExe: 26384 kB
VmLib: 4268 kB
VmPTE: 612 kB
VmSwap: 0 kB
Threads: 28 # 进程中的线程数
SigQ: 0/7256
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000084007
SigIgn: 0000000000003000
SigCgt: 00000001800006e8
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp: 0
Speculation_Store_Bypass: vulnerable
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 218 # 自愿上下文切换的次数 较多的自愿上下文切换可能表示进程的活动模式更加交互式或者进程主动释放CPU资源,这通常是正常的
nonvoluntary_ctxt_switches: 3 # 非自愿上下文切换的次数 较多的非自愿上下文切换可能表示系统资源紧张,或者有其他优先级较高的任务需要执行
巧用文件描述符
/proc/[PID]/fd
目录包含了进程打开的文件描述符的符号链接列表。每个符号链接的名称是文件描述符的编号,指向相应的打开文件、设备或套接字。
一般可以查看到打开的日志文件等信息。
[root@test04 21809]# cd /proc/21809/fd
[root@test04 fd]# ll
total 0
lr-x------. 1 mysql mysql 64 Apr 9 10:17 0 -> /dev/null
l-wx------. 1 mysql mysql 64 Apr 9 10:17 1 -> /var/log/mysqld.log # 日志
lrwx------. 1 mysql mysql 64 Apr 9 10:17 10 -> /var/lib/mysql/ibdata1
lrwx------. 1 mysql mysql 64 Apr 9 10:17 11 -> /var/lib/mysql/ibtmp1
lrwx------. 1 mysql mysql 64 Apr 9 10:17 12 -> /tmp/ibt9FFnA (deleted)
lrwx------. 1 mysql mysql 64 Apr 9 10:17 13 -> /var/lib/mysql/mysql/help_topic.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 14 -> /var/lib/mysql/mysql/help_relation.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 15 -> /var/lib/mysql/mysql/help_keyword.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 16 -> /var/lib/mysql/sys/sys_config.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 17 -> /var/lib/mysql/mysql/plugin.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 18 -> /var/lib/mysql/mysql/innodb_table_stats.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 19 -> /var/lib/mysql/mysql/innodb_index_stats.ibd
l-wx------. 1 mysql mysql 64 Apr 9 10:17 2 -> /var/log/mysqld.log
lrwx------. 1 mysql mysql 64 Apr 9 10:17 20 -> /var/lib/mysql/mysql/gtid_executed.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 21 -> socket:[938812]
lrwx------. 1 mysql mysql 64 Apr 9 10:17 22 -> socket:[938813]
lrwx------. 1 mysql mysql 64 Apr 9 10:17 23 -> /var/lib/mysql/mysql/server_cost.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 24 -> /var/lib/mysql/mysql/engine_cost.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 25 -> /var/lib/mysql/mysql/user.MYI
lrwx------. 1 mysql mysql 64 Apr 9 10:17 26 -> /var/lib/mysql/mysql/user.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 27 -> /var/lib/mysql/mysql/db.MYI
lrwx------. 1 mysql mysql 64 Apr 9 10:17 28 -> /var/lib/mysql/mysql/db.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 29 -> /var/lib/mysql/mysql/proxies_priv.MYI
lrwx------. 1 mysql mysql 64 Apr 9 10:17 3 -> /var/lib/mysql/ib_logfile0
lrwx------. 1 mysql mysql 64 Apr 9 10:17 30 -> /var/lib/mysql/mysql/proxies_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 31 -> /var/lib/mysql/mysql/time_zone_leap_second.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 32 -> /var/lib/mysql/mysql/time_zone_name.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 33 -> /var/lib/mysql/mysql/time_zone.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 34 -> /var/lib/mysql/mysql/time_zone_transition_type.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 35 -> /var/lib/mysql/mysql/time_zone_transition.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 36 -> /var/lib/mysql/mysql/tables_priv.MYI
lrwx------. 1 mysql mysql 64 Apr 9 10:17 37 -> /var/lib/mysql/mysql/tables_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 38 -> /var/lib/mysql/mysql/columns_priv.MYI
lrwx------. 1 mysql mysql 64 Apr 9 10:17 39 -> /var/lib/mysql/mysql/columns_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 40 -> /var/lib/mysql/mysql/procs_priv.MYI
lrwx------. 1 mysql mysql 64 Apr 9 10:17 41 -> /var/lib/mysql/mysql/procs_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 42 -> /var/lib/mysql/mysql/servers.ibd
lrwx------. 1 mysql mysql 64 Apr 9 10:17 43 -> /var/lib/mysql/mysql/event.MYI
lrwx------. 1 mysql mysql 64 Apr 9 10:17 44 -> /var/lib/mysql/mysql/event.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 45 -> /var/lib/mysql/mysql/user.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 46 -> /var/lib/mysql/mysql/db.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 47 -> /var/lib/mysql/mysql/proxies_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 48 -> /var/lib/mysql/mysql/tables_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 49 -> /var/lib/mysql/mysql/columns_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 5 -> /tmp/ibM0L59q (deleted)
lrwx------. 1 mysql mysql 64 Apr 9 10:17 50 -> /var/lib/mysql/mysql/procs_priv.MYD
lrwx------. 1 mysql mysql 64 Apr 9 10:17 6 -> /tmp/ibjidWMR (deleted)
lrwx------. 1 mysql mysql 64 Apr 9 10:17 7 -> /tmp/ib7SYMpi (deleted)
lrwx------. 1 mysql mysql 64 Apr 9 10:17 8 -> /tmp/iblB2PG9 (deleted)
lrwx------. 1 mysql mysql 64 Apr 9 10:17 9 -> /var/lib/mysql/ib_logfile1