一 iostatfree
iostat -x 磁盘使用
rrqm/s: 每秒进行 merge 的读操作数目即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数即 delta(wio)/s
rsec/s: 每秒读扇区数即 delta(rsect)/s
wsec/s: 每秒写扇区数即 delta(wsect)/s
rkB/s: 每秒读 K 字节数是 rsect/s 的一半, 因为每扇区大小为 512 字节(需要计算)
wkB/s: 每秒写 K 字节数是 wsect/s 的一半(需要计算)
avgrq-sz: 平均每次设备 I/O 操作的数据大小 (扇区)delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均 I/O 队列长度即 delta(aveq)/s/1000 (因为 aveq 的单位为毫秒)
await: 平均每次设备 I/O 操作的等待时间 (毫秒)即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备 I/O 操作的服务时间 (毫秒)即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作, 或者说一秒中有多少时间 I/O 队列是非空的即 delta(use)/s/1000 (因为 use 的单位为毫秒)
如果 %util 接近 100%, 说明产生的 I/O 请求太多, I/O 系统已经满负荷, 该磁盘可能存在瓶颈
iotop 磁盘使用
yum install -y iotop
free 查看内存使用情况
-b: 以 Byte 为单位显示内存使用情况;
-k: 以 KB 为单位显示内存使用情况;
-m: 以 MB 为单位显示内存使用情况;
-o: 不显示缓冲区调节列;
-s < 间隔秒数>: 持续观察内存使用状况;
-t: 显示内存总和列;
-V: 显示版本信息
buffer/cache 区别
公式: total=used+free+buff/cache
avaliable 包含 free 和 buffer/cache 剩余部分
0000(磁盘)-- 内存(cache )---cpu // 缓存
0000(cpu)-- 内存(buff)-- 磁盘 // 缓冲
二 ps
ps 查看系统进程
用法: ps auxps -elf
ps aux | grep mysql 查看 mysql 的进程
STAT 部分说明
D 不能中断的进程
R run 状态的进程
S sleep 状态的进程
T 暂停的进程
Z 僵尸进程
< 高优先级进程
N 低优先级进程
L 内存中被锁了内存分页
s 主进程
l 多线程进程
前台进程
ls -l /proc / 进程号 / 查看进程所在的位置
线程与进程
线程的出现是为了降低上下文切换的消耗, 提高系统的并发性, 并突破一个进程只能干一样事的缺陷, 使到进程内并发成为可能
假设, 一个文本程序, 需要接受键盘输入, 将内容显示在屏幕上, 还需要保存信息到硬盘中若只有一个进程, 势必造成同一时间只能干一样事的尴尬 (当保存时, 就不能通过键盘输入内容) 若有多个进程, 每个进程负责一个任务, 进程 A 负责接收键盘输入的任务, 进程 B 负责将内容显示在屏幕上的任务, 进程 C 负责保存内容到硬盘中的任务这里进程 A,B,C 间的协作涉及到了进程通信问题, 而且有共同都需要拥有的东西 - 文本内容, 不停的切换造成性能上的损失若有一种机制, 可以使任务 A,B,C 共享资源, 这样上下文切换所需要保存和恢复的内容就少了, 同时又可以减少通信所带来的性能损耗, 那就好了是的, 这种机制就是线程
线程也叫轻量级进程, 它是一个基本的 CPU 执行单元, 也是程序执行过程中的最小单元, 由线程 ID 程序计数器寄存器集合和堆栈共同组成线程的引入减小了程序并发执行时的开销, 提高了操作系统的并发性能线程没有自己的系统资源
进程是计算机中的程序关于某数据集合上的一次运行活动, 是系统进行资源分配和调度的基本单位, 是操作系统结构的基础或者说进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动, 进程是系统进行资源分配和调度的一个独立单位
线程则是进程的一个实体, 是 CPU 调度和分派的基本单位, 它是比进程更小的能独立运行的基本单位
进程和线程的关系:
(1)一个线程只能属于一个进程, 而一个进程可以有多个线程, 但至少有一个线程
(2)资源分配给进程, 同一进程的所有线程共享该进程的所有资源
(3)CPU 分给线程, 即真正在 CPU 上运行的是线程
三查看网络状态
netstat 查看网络状态
netstat -lnp 查看监听端口
netstat -an 查看系统的网络连接状况
netstat -lntp 只看出 tcp 的, 不包含 socket
ss -an 和 nestat 异曲同工 但是 ss 不显示进程名字
分享一个小技巧:
netstat -an | awk /^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}
查看各种状态的有多少个
ESTABLISHED 需要特别关注, 如果特别大, 就说明系统繁忙
tcp 与 udp 区别与介绍
http://blog.csdn.net/li_ning_/article/details/52117463
tcp 的三次握手与四次分手
https://www.cnblogs.com/leezhxing/p/4524176.html
四抓包
yum install -y tcpdump
抓包工具 tcpdump
用法: tcpdump -nn
- tcpdump -nn -i ens33
- tcpdump -nn port 80 // 指定端口 80
- tcpdump -nn not port 22 and host 192.168.0.100 // 指定 host 和端口不是 22
- tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap // 抓 10 个包放入 1.cap 中, 可以用 file 命令查看信息
- tcpdump -r /tmp/1.cap // 读取抓到的包信息
- tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
- yum install -y wireshark
- tcpdump -nn -i ens33
第一个 n 是 ip, 第二个 n 是端口号
不写 n 就显示主机名和 ssh
来源: http://www.bubuko.com/infodetail-2533775.html