七周第二次课(5月7号)笔记

10.6 监控io性能
10.7 free命令
10.8 ps命令
10.9 查看网络状态
10.10 linux下抓包

监控io性能

iostat -x 查看%util指标,数字越大,代表磁盘越忙(可能有问题)


iotop命令可动态查看进程使用情况


free命令:查看内存使用情况


CPU读取磁盘的数据过程:0011(磁盘数据)-->内存(cache)-->CPU  

                                         CPU-->内存(buffer)--> 0011(磁盘数据)


     ps命令(查看系统进程)

ps aux/ ps -elf 静态显示系统所有进程

检查进程是否在运行 ps aux | grep xxxx 如 (nginx, mysql)等等

使用/proc/PID查看某进程的启动信息(找到exe软链接)



VSZ 虚拟内存

RSS 物理内存(类似于top中的RES)

STAT :进程的状态 ,如下图


如 vmstat  命令,某些时候需要的时候调用一下,占用CPU时间少,故为S+ (+表示前台进程, tty 都是ps0/1,终端上的进程)

<高优先级进程,CPU优先使用权

N 低优先级进程,反之

D 不可中断进程

R Running的进程

T 暂停的进程 (如vmstat 命令后 ctrl +z)

Z 僵尸进程(主进程意外终止,子进程依然在运行)

L 内存中被锁了内存分页

s主进程 (如下图示例)


l 多线程进程

补充:线程和进程的区别

作者:zhonyong
链接:https://www.zhihu.com/question/25532384/answer/81152571
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先来一句概括的总论:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。

下面细说背景
CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。

一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就是轮流着来。

一个必须知道的事实:执行一段程序代码,实现一个功能的过程介绍 ,当得到CPU的时候,相关的资源必须也已经就位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次他被CPU临幸的运行环境,必须保存。

串联起来的事实:前面讲过在CPU看来所有的任务都是一个一个的轮流执行的,具体的轮流方法就是: 先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文。。。

========= 重要的东西出现了========
进程和线程 就是这样的背景出来的 ,两个名词不过是对应的CPU时间段的描述,名词就是这样的功能。
  • 进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文

线程是什么呢?
进程的颗粒度太大,每次都要有上下的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成 a,b,c等多个块组合而成。那么这里具体的执行就可能变成:

程序A得到CPU =》CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行A的c小段,最后CPU保存A的上下文。

这里a,b,c的执行是共享了A的上下文,CPU在执行的时候没有进行上下文切换的。这 里的a,b,c就是线程,也就是说线程是共享了进程的上下文环境,的更为细小的CPU时间段。

到此全文结束,再一个总结:

进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。


查看网络状态

如开启mysql, nginx 服务,需要开端口进行网络实时监听

netstat -lnp


netstat -an :查看所有的连接状态

netstat -ltnp (只查看tcp) ltunp (查看tcp/udp)


netstat -an |awk '/^tcp/ {++sta[$NF]} END {for (key in sta) print key,"\t", sta[key]}'命令查看握手状态,established为真正连接建立次数,完整形式为:
TIME_WAIT
FIN_WAIT1
FIN_WAIT2
ESTABLISHED
SYN_RECV
CLOSING
LAST_ACK
LISTEN
  -A-

用ss -an 也可以查看进程,如果想过滤带有listen可以使用 ss -an |grep -i listen/grep LISTEN,缺点是不能像netstat -ltnp一样显示进程名和PID等
Linux下抓包


安装tcpdump包后,执行tcpdump -nn 并指定网卡名 -i 接网卡名 tcpdump -nn -i 网卡名

第一个字母n会显示出详细的IP地址和端口号(以数字形式),否则只会显示主机名和端口名(如ssh)


DDos  udp flood 攻击

可以加条件,如:tcpdump -nn -i 网卡名 port/not port/ not port xxx and host xxxxx


-c 表示数据包数量, -w表示数据包的存入地址

如果出现空白是因为没有执行交互式通信,可打开另外一个客户端执行任意一个动态查看命令如vmstat 1


通信数据包文件1.cap, cat为乱码,可用

tcpdump -r  /tmp/1.cap查看数据流

wireshark 也是抓包工具,和tcpdump类似

tshark命令可以查看指定网卡80端口的web访问情况(类似于web访问日志)




猜你喜欢

转载自blog.csdn.net/fuel91/article/details/80206928