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

可莉
• 阅读 529

10.6 监控io性能

关于磁盘监控
更详细的查看磁盘的状态
iostat 是在安装sysstat这个包的时候就跟着安装了,和sar的用同一个包

iostat -x 1


[root@localhost ~]# iostat -x 1
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain)     2017年08月06日     _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.10    0.00    1.67    0.88    0.00   96.35

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.23   13.83    5.61   523.69    55.02    59.56     0.10    5.05    4.71    5.89   1.54   2.98
scd0              0.00     0.00    0.02    0.00     0.09     0.00     8.00     0.00    2.36    2.36    0.00   2.36   0.01
  1. %util :这一列表示io等待,如果这个百分比达到50%或者60%,就证明磁盘非常忙
  2. r/s: 写,如果%util的百分比很大,那么这一项也会很大
  3. w/s:读,如果%util的百分比很大,那么这一项也会很大 假如:读,写的数值都不打,但是%util的百分比却很大,证明磁盘存在问题
    ==cpu有一部分时间是给进程处理计算,有一部分是给io等待的,因为io读,写都是需要时间等待==

假如发现磁盘io很忙,可以详细查看是哪个进程在频繁读写

[root@localhost ~]# iotop
Total DISK READ :    0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:    0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 2449 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.02 % [kworker/0:2]
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 21
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
   10 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
   12 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kdevtmpfs]
   14 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   15 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khungtaskd]
   16 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [writeback]
   17 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd]
   18 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bioset]
   19 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd]
   20 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [md]
 2070 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % master -w
  537 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % NetworkManager --no-daemon
   26 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kswapd0]

只要关注项 IO> io的应用百分比

10.7 free命令

free centos 6和7的显示结果不一样

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1875720      228328     1338400        8632      308992     1465948
Swap:       2097148           0     2097148


第一行:说明
第二行:内存使用情况    //主要关注情况
第三行:swap   使用情况
第一列:total    内存总共大小
第二列:used    使用量
第三列:free      剩余量
第四列:shared  共享量
第五列: buff/cache 缓冲区和缓存预留总量
第六列:available:可以使用的内存总量
buffer缓冲  是用于存放要输出到disk(块设备)的数据的
cache缓存   是存放从disk上读出的数据。


000(磁盘数据)-->内存(cache)-->CPU

磁盘数据要让CPU进行处理,需要经过数据能够有一个缓和,这一部分储存在内存的数据较缓存(cache)

000(cpu处理后的数据)-->内存(buffer)-->磁盘

CPU处理好的数据要存放回磁盘,需要经过内存让数据有个缓和,这一部分存储在内存的数据叫缓冲(buffer)

让数据在内存里进行缓冲和缓和的主要原因,就是因为CPU处理数据太快,不可能等待你磁盘慢慢读写,所以才需要内存进行一个缓和,因为流向的不同名字也不一样 因为这一部分的数据很重要,所以,系统就会预留一部分的空间给cache和buffer

  1. total的数值=used的数值+free的数值+buff/cache的数值
  2. avaliable的数值=free+buff/cache

free 的选项

-m  //选项 指定单位为mb
-h   //选项 智能的显示单位,常用这个选项

有时需要关注sawp
sawp的 使用量跑满,free 的量都为零,那么sawp 就需要添加了
加sawp 不是解决问题的方法,而是增加内存
如果sawp不够,表示内存不过,可能是内存泄露,需要考虑系统程序是否存在bug

10.8 ps命令

ps 把进程的快照,给汇报一下
ps aux 可以把系统所有的进程都列出来

[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.5 128092 10792 ?        Ss   8月07   0:01 /usr/lib/systemd/systemd --switched-root --system --deseri
root         2  0.0  0.0      0     0 ?        S    8月07   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    8月07   0:00 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S    8月07   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    8月07   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        R    8月07   0:00 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S    8月07   0:00 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S<   8月07   0:00 [khelper]
root        13  0.0  0.0      0     0 ?        S    8月07   0:00 [kdevtmpfs]
root        14  0.0  0.0      0     0 ?        S<   8月07   0:00 [netns]
root        15  0.0  0.0      0     0 ?        S    8月07   0:00 [khungtaskd]
root        16  0.0  0.0      0     0 ?        S<   8月07   0:00 [writeback]
root        17  0.0  0.0      0     0 ?        S<   8月07   0:00 [kintegrityd]
root        18  0.0  0.0      0     0 ?        S<   8月07   0:00 [bioset]
root        19  0.0  0.0      0     0 ?        S<   8月07   0:00 [kblockd]
root        20  0.0  0.0      0     0 ?        S<   8月07   0:00 [md]
root        26  0.0  0.0      0     0 ?        S    8月07   0:00 [kswapd0]
root        27  0.0  0.0      0     0 ?        SN   8月07   0:00 [ksmd]
root        28  0.0  0.0      0     0 ?        SN   8月07   0:00 [khugepaged]
root        29  0.0  0.0      0     0 ?        S    8月07   0:00 [fsnotify_mark]
root        30  0.0  0.0      0     0 ?        S<   8月07   0:00 [crypto]

第一列  USER  运行用户  
第二列  PID   进程的ID 
第三列  %CPU  CPU百分比
第四列  %MEM 内存百分比
第五列  VSZ 虚拟内存
第六列  RSS 物理内存
第七列  TTY   在哪个tty上
第八列  STAT  进程状态
第九列  START 启动时间
第十列   TIME 运行多长时间
第十一列  COMMAND 命令
RSS等同于top 命令下的 RES

STAT进程状态部分说明
D 不能中断的进程   //少见,但一般有D状态的进程,都会对系统负载有很大影响,但是却又不会影响到CPU的运行情况,这是属于一种特例的存在
R run状态的进程     //表示在一个时间段在使用CPU的状态
S sleep状态的进程  //运算完之后,就暂时休息一会再继续使用CPU的状态
T 暂停的进程     //被暂停的进程
Z 僵尸进程           //僵尸进程过多,需要将它杀死
< 高优先级进程   //优先使用
N 低优先级进程  //和高优先级对应的 级别
L 内存中被锁了内存分页  
s 主进程             //
l 多线程进程     //说明这个进程有多个线程
+ 前台进程

进程ID 用在杀死一个进程的时候

kill 1346

ps 是一个静态的,一次性的帮当前的进程状况列出来
检查一个进程是否在运行

ps -elf 

查看一个进程所在路径

ls -l /proc/505               //505为进程PID

每个进程都会有一个对应的目录

nginx 分父进程和子进程,父进程(master)是由root用户启动的,子进程(worker)是由父进程分出来的,由普通用户启动的 线程是由一个大的进程组成的,一个进程里面有多个线程

10.9 查看网络状态

netstat 查看的就是tcp/ip 的通信状态
正常情况下,一个服务器是没有一个端口是进行监听的,没有端口监听,就表示他没有办法和其他机器进行同行,监听端口,相当于在这个端口上开了孔,允许通过这个孔进行通信

netstat -lnp 


[root@localhost ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      997/sshd            //终端连接端口
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2070/master    //邮件端口 IPV4
tcp6       0      0 :::3306                 :::*                    LISTEN      1618/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      997/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      2070/master       //邮件端口 IPV6  和IPV4 是同一个端口
udp        0      0 127.0.0.1:323           0.0.0.0:*                           506/chronyd     
udp6       0      0 ::1:323                 :::*                                506/chronyd
raw6       0      0 :::58                   :::*                    7           537/NetworkManager

l  监听

查看TCP所有的状态

netstat -an

查看所有的网络连接的状态数量

[root@localhost ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN      5
ESTABLISHED      1

如果 ESTABLISHED 这个数值很大,说明系统很忙,通常情况下1000以内,服务器都还可以承受

  • TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

  • UDP
  1. UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
  2. 与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

10.10 linux下抓包

服务器可能会遭受到攻击,遇到攻击的话网卡流量就会异常
因为是虚拟机,网卡比较特殊,使用这个命令的时候需要特别指定网卡名字

[root@localhost ~]# tcpdump -nn -i ens32
01:12:00.696723 IP 192.168.133.1.2100 > 192.168.133.130.22: Flags [.], ack 37992856, win 11245, length 0
01:12:00.696741 IP 192.168.133.130.22 > 192.168.133.1.2100: Flags [P.], seq 37994476:37994656, ack 5461, win 360, length 180
01:12:00.696745 IP 192.168.133.1.2100 > 192.168.133.130.22: Flags [.], ack 37994476, win 10840, length 0
01:12:00.696848 IP 192.168.133.130.22 > 192.168.133.1.2100: Flags [P.], seq 37994656:37995044, ack 5461, win 360, length 388

主要看的就是数据的流向,有时看的是length 0,默认看的是tcp 的包,有时可能看到udp 的包,如果看到udp的包,很有可能就是被攻击了

指定端口抓包

tcpdump -nn port 80

指定不要抓那个端口的包

tcpdump -nn not port 80

指定不要抓那个端口的包且指定hosts

tcpdump -nn not port 80 and host 192.168.133.1

指定抓包的条数,并保存

tcpdump -nn -c 100 -w /tmp/1.cap

抓包的时候,会出现长的空白,是因为使用命令抓包并保存为文件,是不在屏幕上显示数据流量过程,不在屏幕上显示,只要产生的数据量就少很多,因为每次屏幕显示了一条,自然数据也要回复一条,所以保存为文件的时候才是真正的数据包流量 第一个n 表示 IP用数字的形式显示出来
1.cap 就是从网卡捕获的数据包,就是真真正正的通信数据,因为数据包里的信息就是服务器与其他机器通信的数据,所以这个数据是不能直接解析不能直接使用cat去看
只能使用

file /tmp/1.cap

查看

如果一定想看这个文件,只能使用tcpdump查看

tcpdump -r /tmp/1.cap
  • 实用拓展:

web的80端口的使用情况

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"

通过条命令,可以很清晰的看到什么IP,通过什么方式,访问我网站的那个页面
需要安装这个包

yum install -y wireshark

==DDos 又叫 udp flood ,udp的洪水攻击;接第三方应用防御==

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这