内容一:系统环境要求
服务器系统配置好可用的软件源
内容二:如果系统中没有此命令,则需要先安装此命令
# yum -y install psmisc
(补充:这里以 CentOS&RHEL 安装 psmisc 为例)
内容三:使用此命令
# pstree
服务器系统配置好可用的软件源
# yum -y install psmisc
(补充:这里以 CentOS&RHEL 安装 psmisc 为例)
# pstree
# firefox&
按下 “ctrl” 键和 “z” 键
# jobs
# jobs %<background process number>
# jobs %<background process name>
(注意:只有后台进程名唯一时此操作才有效)
# bg %<background process number>
(注意:只有可以在后台启动的进程才能在后台启动)
# bg %<background process name>
(注意:只有可以在后台启动的进程才能在后台启动,且只有后台进程名唯一时此操作才有效)
# fg %<background process number>
# fg %<background process name>
(注意:只有后台进程名唯一时此操作才有效)
# kill %<background process number>
(补充:这里可以配合各种 kill 选项进行操作,例如 kill -9)
# kill %<background process name>
(注意:只有后台进程名唯一时此操作才有效)
(补充:这里可以配合各种 kill 选项进行操作,例如 kill -9)
# cat /sys/block/<partition name>/queue/nr_requests
128
# echo 512 > /sys/block/<partition name>/queue/nr_requests
(补充:这里以降硬盘的吞吐量提高到 512 为例)
1) CFQ:完全公平排队 I/O 调度程序,是通用型服务器、多媒体应用和桌面系统的最佳选择
2) NOOP:电梯式调度程序,倾向于牺牲读操作而提高写操作
3) Deadline:截至时间调度程序,防止写操作因为不能进行读操作而被牺牲的情况
4) AS:预料 I/O 调度程序,适用于写操作量需求较大的服务器,不适用于数据库服务器
# dmesg | grep -i scheduler
# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
(补充:这里中括号 “[]” 以内的调度算法名就是当前使用的调度算法)
# echo noop > /sys/block/<partition name>/queue/scheduler
(注意:此种修改方式会在重启后失效)
# grubby --update-kernel=ALL --args="elevator=<scheduling algorithm name>"
(注意:此种修改方式需要重启才会生效)
# systemctl list-unit-files
(补充:所有受 systemctl 管理单元的文件都是放在 /usr/lib/systemd/system 目录下的)
# systemctl list-units
(补充:所有受 systemctl 管理单元的文件都是放在 /usr/lib/systemd/system 目录下的)
# systemctl --failed
(补充:所有受 systemctl 管理单元的文件都是放在 /usr/lib/systemd/system 目录下的)
# systemctl list-units --type service
(
补充:
1) 所有受 systemctl 管理单元的文件都是放在 /usr/lib/systemd/system 目录下的
2) service 是一个个单独的服务
3) target 是包含很多个单独服务(service)的一组服务
)
# systemctl list-units --type target
(
补充:
1) 所有受 systemctl 目标管理单元的文件都是放在 /usr/lib/systemd/system 目录下的
2) service 是一个个单独的服务
3) target 是包含很多个单独服务(service)的一组服务
)
# systemctl status <unit>
(
补充:
1) systemctl 的主要状态项有:
Loaded 单元是否已被内存加载
Active 单元是否已成功运行
Main PID 单元主进程的 PID 号
Status 单元的其他相关信息
2) Active 状态项的参数有:
loaded 单元文件已经处理
active(running) 单元正在运行
active(exited)已完成单元的一次性配置
active(waiting)正在等待启动
inactive 没有启动
enabled 将在系统启动时自动启动
disabled 不会在系统启动时自动启动
static 可以被其他单元启动
3) 单元既可以是服务单元也可以是目标单元
)
# systemctl start <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl stop <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl restart <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl is-active <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl enable --now <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl enable <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl disable <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl is-enabled <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl mask <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl umask <unit>
(
补充:
1) service 是一个个单独的服务
2) target 是包含很多个单独服务(service)的一组服务
3) 单元既可以是服务单元(service)也可以是目标单元(target)
)
# systemctl daemon-reload
记一次iotop分析磁盘占用io问题
问题描述
某一台服务器上面 程序在每小时内偶尔丢包 排查服务器所有性能瓶颈之后发现一个奇怪的问题 程序丢包前后 会有IO过高的情况 于是使用iotop命令排查是哪个程序偶尔占用过高的磁盘IO
所用命令
iotop
相关参数
-o:只显示有io操作的进程
-b:批量显示,无交互,主要用作记录到文件
-n NUM:显示NUM次,主要用于非交互式模式
-d SEC:间隔SEC秒显示一次
-p PID:监控的进程pid
-u USER:监控的进程用户
排查方法
iostat命令 只能看出每个盘符的IO情况 不能看到是具体哪个进程使用的IO 所以 我们需要使用iotop命令 但是这次的IO情况并不是一直出现 而是偶尔不规律出现 如果用肉眼去一直盯着终端看 显然不可行 于是我们可以用iotop的-b参数 让结果以非交互的方式输出 这样我们便可以用awk去处理 打印出我们需要的IO列以及相应的进程
命令
iotop -b | awk -F'%' '{if($(NF-1) > 0.2 && $(NF-1) ~ /[0-9]/ && $0 !~ /DISK/)printf "TIME: %s,IO:%s%,COMMAND:%s\n",strftime("%F %T"),$(NF-1),$NF}'
输出结果
[root@localhost ~]# iotop -b | awk -F'%' '{if($(NF-1) > 0.2 && $(NF-1) ~ /[0-9]/ && $0 !~ /DISK/)printf "TIME: %s,IO:%s%,COMMAND:%s\n",strftime("%F %T"),$(NF-1),$NF}'
TIME: 2018-03-21 18:04:23,IO: 0.23 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:04:35,IO: 0.44 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:04:47,IO: 0.22 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:04:58,IO: 0.39 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:08,IO: 0.68 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:22,IO: 0.52 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:34,IO: 0.24 %,COMMAND: [kworker/0:2]
TIME: 2018-03-21 18:05:45,IO: 0.26 %,COMMAND: [kworker/0:2]
输出结果类似上面 这里只是简单举个例子 打印出IO大于0.2%的进程 并根据客户需求打印除相应的时间 这里的时间打印 利用awk自己的函数 strftime()
————————————————
版权声明:本文为CSDN博主「why_me310」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/why_me310/article/details/79643352
注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来
站主补充:
iotop 还有以下参数
-k, --kilobytes 在非交互的模式下,以 kb 为单位显示
-t, --time 在非交互的模式下,加上时间戳
-q, --quiet 在交互的模式下,禁止头几行,它有三种指定方式
-q 只有在第一次显示时显示列名
-qq 永远不显示列名
-qqq 永远不显示 I/O 汇总的总量