一些基础
不同进程之间,进行数据访问
同一主机:pipe 管道
socket 套接字文件
signal 信号
shm shared memory
semaphore 信号量,一种计数器
不同主机:socket IP和端口号 (最底层的实现方式)
RPC remote procedure call
MQ 消息队列,如:Kafka,RabbitMQ,ActiveMQ
Linux系统状态的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
pstree命令:
pstree display a tree of processes
ps: process state
ps report a snapshot of the current processes
/proc 文件夹存放的都是目前正在运行的进程的数据,每一个进程,系统都会分配专门的文件夹来存放此进程相关的信息
ps 进程管理
支持三种选项
BSD选项
- 默认显示当前终端中的进程
- a 选项包括所有终端中的进程
- x 选项包括不链接终端的进程
- u 选项显示进程所有者的信息
- f 选项显示进程树,相当于 --forest
- k|--sort 属性 对属性排序,属性前加- 表示倒序
- o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
- L 显示支持的属性列表
UNIX选项
- -C cmdlist 指定命令,多个命令用,分隔
- -L 显示线程
- -e: 显示所有进程,相当于-A
- -f: 显示完整格式程序信息
- -F: 显示更完整格式的进程信息
- -H: 以进程层级格式显示进程相关信息
- -u userlist 指定有效的用户ID或名称
- -U userlist 指定真正的用户ID或名称
- -g gid或groupname 指定有效的gid或组名称
- -G gid或groupname 指定真正的gid或组名称
- -p pid 显示指pid的进程
- --ppid pid 显示属于pid的子进程
- -M 显示SELinux信息,相当于Z
一些值的含义
ni: nice值
pri: priority 优先级
psr: processor CPU编号
rtprio: 实时优先级
示例 ps axo pid,cmd,psr,ni,pri,rtprio
VSZ: Virtual memory SiZe,虚拟内存集,线性内存
RSS: ReSident Size, 常驻内存集 (真实内存)
常用组合:
- aux
- -ef
- -eFH
- -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
- axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
一些示例
- ps -p 3914 -o pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm //查看某个进程的一些属性
- ps -p 1244 -o comm= 使用其PID查找进程名称:
- ps -C sshd,bash 要以其名称选择特定进程,显示其所有子进程
- ps -C httpd,sshd -o pid= 查找指定进程名所有的所属PID
- ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head 查找占用最多内存和CPU的进程
- ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
pgrep 专门用于查找一些进程的,很简单默认只显示进程号,顶多显示名字 -a 可以把参数也显示
- pgrep [options] pattern
- -u uid: effective user,生效者
- -U uid: real user,真正发起运行命令者
- -t terminal: 与指定终端相关的进程
- -l: 显示进程名
- -a: 显示完整格式的进程名
- -P pid: 显示指定进程的子进程
示例
top
排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
栏位信息简介
- us:用户空间
- sy:内核空间
- ni:调整nice时间
- id:空闲
- wa:等待IO时间
- hi:硬中断
- si:软中断(模式切换)
- st:虚拟机偷走的时间
top - 18:32:45 up 230 days, 2:01, 1 user, load average: 0.00, 0.00, 0.00
(1)18:45:02 当前时间
(2)up 230 days, 2:14, 系统连续运行时间
(3)1 user, 当前登录用户数
(4)load average: 0.00, 0.00, 0.00 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到当前时刻的平均值。
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
(1)total 进程总数
(2)running 正在运行的进程数
(3)sleeping 睡眠的进程数
(4)stopped 停止的进程数
(5)zombie 僵尸进程数
Cpu(s): 0.8%us, 0.5%sy, 0.0%ni, 98.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st
(1)0.8%us 用户空间占用CPU百分比
(2)0.5%sy 内核(系统)空间占用CPU百分比
(3)0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比
(4)98.5%id 空闲CPU百分比
(5)0.0%wa 等待输入输出的CPU时间百分比
(6)0.0%hi 硬件CPU中断占用百分比
(7)0.0%si 软中断占用百分比
(8)0.2%st 虚拟机占用百分比
Mem: 3974188k total, 2811108k used, 1163080k free, 144292k buffers
(1)total 物理内存总量
(2)used 使用的物理内存总量
(3)free 空闲内存总量
(4)buffers 用作内核缓存的内存量
Swap: 2097148k total, 46184k used, 2050964k free, 595092k cached
(1)total 交换区总量
(2)used 使用的交换区总量
(3)free 空闲交换区总量
(4)cached 缓冲的交换区总量
空闲内存 = 空闲内存总量free + 内核缓存的内存量 buffers + 缓冲的交换区总量cached
free 内存管理
free [OPTION]
- -b 以字节为单位
- -m 以MB为单位
- -g 以GB为单位
- -h 易读格式
- -o 不显示-/+buffers/cache行
- -t 显示RAM + swap的总和
- -s n 刷新间隔为n秒
- -c n 刷新n次后即退出
清理缓存
vmstat命令:虚拟内存信息 也有磁盘io
swap:
- si:从磁盘交换进内存的数据速率(kb/s)
- so:从内存交换至磁盘的数据速率(kb/s)
io:
- bi:从块设备读入数据到系统的速率(kb/s)
- bo: 保存数据至块设备的速率
iostat:统计CPU和设备IO信息
示例:iostat 1 10
iftop:显示带宽使用情况,EPEL源
示例:iftop -n -i eth1
glances命令 跨网络监控其他系统的参数
S: glances -s -B IPADDR IPADDR: 指明监听的本机哪个地址
C: glances -c IPADDR IPADDR:要连入的服务器端地址
可以通过防火墙策略,限定特定的地址可以连接我
dstat命令:系统资源统计,代替vmstat,iostat
- -c 显示cpu相关信息
- -C #,#,...,total
- -d 显示disk相关信息
- -D total,sda,sdb,...
- -g 显示page相关统计数据
- -m 显示memory相关统计数据
- -n 显示network相关统计数据
- -p 显示process相关统计数据
- -r 显示io请求相关的统计数据
- -s 显示swapped相关的统计数据
iotop
iostat 只能看出某个设备的ip情况
而iotop可以看到某个进程的io情况,显示某个进程在磁盘上的读写情况
lsof 查看某个挂载点或者设备是否被使用
- -a:列出打开该文件存在的进程 lsof -a filename
- -c<进程名>:列出指定进程所打开的文件 lsof -c pname
- -g:列出GID号进程详情
- -d<文件号>:列出占用该文件号的进程
- +d<目录>:列出目录下被打开的文件
- +D<目录>:递归列出目录下被打开的文
- -n<目录>:列出使用NFS的文件
- -i<条件>:列出符合条件的进程(4、6、协议、:端口、 @ip )
- -p<进程号>:列出指定进程号所打开的文件
- -u:列出UID号进程详情
- -h:显示帮助信息
- -v:显示版本信息。
- -n: 不反向解析网络名字
一些示例
指定进程号,可以查看该进程打开的文件 lsof -p 9527
查看指定程序打开的文件 lsof -c httpd
查看指定用户打开的文件 lsof -u root | more
查看指定目录下被打开的文件
lsof +D /var/log/ lsof +d /var/log/
参数+D为递归列出目录下被打开的文件,参数+d为列出目录下被打开的文件
- 查看所有网络连接
- lsof -i –n
- lsof -i@127.0.0.1
- 通过参数-i查看网络连接的情况,包括连接的ip、端口等以及一些服务的连接情况,例如: sshd等。也可以通过指定ip查看该ip的网络连接情况
- 查看端口连接情况
- lsof -i :80
- lsof -i@172.16.12.5:22
- 通过参数-i:端口可以查看端口的占用情况,-i参数还有查看协议,ip的连接情况等
- 查看指定进程打开的网络连接
- lsof -i –n -a -p 9527
- 参数-i、-a、-p等,-i查看网络连接情况,-a查看存在的进程,-p指定进程
- 查看指定状态的网络连接
- lsof -n -P -i TCP -s TCP:ESTABLISHED
- -n:no host names, -P:no port names,-i TCP指定协议,-s指定协议状态通过多个参数可以 清晰的查看网络连接情况、协议连接情况等