查看磁盘读写状态: iostat -x %util:表示io等待,也就是磁盘使用占用cpu百分比。如果百分比很大,如50%,60%说明磁盘io很差,因为磁盘很忙,那么读写状态行rkb/s,wkb/s数值也会很大。
查看哪些进程在读写磁盘io,可以查看哪些进程导致磁盘io很忙(安装包:yum install -y iotop): iotop 使用磁盘io越多的排在越前。
查看当前系统的总内存大小以及使用内存的情况
查看内存和交换分区的使用情况: free //以kb为单位显示 free -m //以M为单位 free -h //以合适的单位为单位,包括有M,G(常用) Mem是内存的使用情况,分别是内存的总大小(total),使用了多少(used),剩余多少(free),共享的多少(shared),缓存的多少(buffer/cache),马上可以使用的内存大小(available) Swap是交换分区的使用情况
公式:total=used+free+buff/cache avaliable包含free和buffer/cache剩余部分
PS:0000(磁盘) —>内存(cache) –>cpu //cpu到磁盘里读数据速度很慢,但是把磁盘的数据放到内存里,cpu到内存读取的速度就很快。 cpu(0000) —>内存(buffer)–>磁盘 //cpu运行的速度很快,但是磁盘很慢,要把数据写进磁盘就会很慢,cpu等不了,所以cpu分析处理好的数据先放到内存再放到内存。
ps命令是查看系统进程,静态的一次性的把当前进程的使用状况列出来。
常用的命令用法: ps aux
%MEM:内存百分比。 VSZ:虚拟内存。 RSS:物理内存。 TTY:控制中断。 START:什么时候开始的。 TIME:运行了多久。 COMMAND:命令。 STAT部分说明: D 不能中断的进程 R run状态的进程 S sleep状态的进程 T 暂停的进程 Z 僵尸进程 < 高优先级进程 N 低优先级进程 L 内存中被锁了内存分页 s 主进程 l 多线程进程 + 前台进程 + ps -elf
查看进程在哪里启动: ls -l /proc/进程PID //进程的PID都有对应的目录
PS:线程和进程的关系:线程是属于进程的,线程运行在进程空间内,同一进程所产生的的线程共享同一用户内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。所以,线程不能独立地执行,它必须依附在一个运行的应用程序上(即进程上),而一个进程至少需要一个线程作为它的指令执行,进程管理着资源(比如CPU、内存、文件等等)。而将线程分配到某个CPU上执行 线程和进程的区别:当操作系统分配给进程资源后,同属一个进程的多个线程之间可以相互共享进程中的内存资源,原因是线程没有自己独立的内存资源,它只有自己执行的堆栈和局部变量。而多个进程之间每个进程都拥有自己的一整套变量,即每个进程都有自己独立的内存单元。这就使得多线程之间的通信比多进程之间的通信更加的容易和高效。
命令:netstat //查看tcp/ip的通信状态
ss -an 与netstat差不多,但是不会显示进程名字。
命令中各选项的含义如下: -a 显示所有socket,包括正在监听的。
-c 每隔1秒就重新显示一遍,直到用户中断它。
-i 显示所有网络接口的信息,格式同“ifconfig -e”。
-n 以网络IP地址代替名称,显示出网络连接情形。
-r 显示核心路由表,格式同“route -e”。
-t 显示TCP协议的连接情况。
-u 显示UDP协议的连接情况。
-v 显示正在进行的工作。
查看监听端口,打印当前系统启动哪些端口: netstat -lnp
netstat -ltnp //只查看tcp,没有udp和unix
netstat -ltunp //只查看tcp,udp。没有unix
查看系统的所有网络连接状况: netstat -an
netstat -an参数中stat(状态)的含义如下:
参数 | 含义 |
---|---|
LISTEN | 侦听来自远方的TCP端口的连接请求 |
SYN-SENT | 在发送连接请求后等待匹配的连接请求 |
SYN-RECEIVED | 在收到和发送一个连接请求后等待对方对连接请求的确认 |
ESTABLISHED | 代表一个打开的连接,我们常用此作为并发连接数) |
FIN_WAIT-1 | 等待远程TCP连接中断请求,或先前的连接中断请求的确认 |
FIN_WAIT-2 | 从远程TCP等待连接中断请求 |
CLOSE-WAIT | 等待从本地用户发来的连接中断请求 |
CLOSING | 等待远程TCP对连接中断的确认 |
TIME_WAIT | 等待足够的时间以确保远程TCP连接收到中断请求的确认 |
LAST_ACK | 等待原来发向远程TCP的连接中断的确认 |
CLOSED | 没有任何连接状态 |
- 在日常工作中,我们可以用shell组合命令来查看服务器的TCP连接状态并汇总,命令如下: netstat -an|awk ‘/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}’ netstat -an | awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key,”\t”,sta[key]}’
参数说明:
参数 | 说明 |
---|---|
CLOSED | 没有连接活动或正在进行的 |
LISTEN | 服务器正在等待的进入呼叫 |
SYN_RECV | 一个连接请求已经到达,等待确认 |
SYN_SENT | 应用已经开始,打开一个连接 |
ESTABLISHED | 正常数据传输状态,也可以近似的理解为当前服务器的并发数;(如果数值很大说明系统很忙,1000以内都是可以接受的) |
FIN_WAIT1 | 应用已经完成 |
FIN_WAIT2 | 另一边同意释放 |
ITMED_WAIT | 等待所有分组死掉 |
CLOSING | 两边同时尝试关闭 |
TIME_WAIT | 另一边已初始化一个释放 |
LAST_ACK | 等待所有分组死掉 |
- 统计 TCP连接数 命令: netstat -an |grep ‘ESTABLISHED’ |grep ‘tcp’ |wc -l
抓包工具tcpdump 安装包:yum install -y tcpdump
用法:tcpdump -nn
命令:tshark //与tcpdump类似的抓包工具
安装包命令:yum install -y wireshark
查看什么IP访问我们的网站的什么链接: 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”
扩展: 1. 扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html 2. 使用tshark抓包: