7-2 10 io性能 free ps 网络状态 抓包

七周二次课(7月11日)

10.6 监控io性能html

10.7 free命令linux

10.8 ps命令ios

10.9 查看网络状态web

10.10 linux下抓包缓存

扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html服务器

tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html网络

10.6 监控io性能

iostat和sar属于同一个软件包,命令被用于监视系统输入输出设备和CPU的使用状况。它的特色是汇报磁盘活动统计状况,同时也会汇报出CPU使用状况。同vmstat同样,iostat也有一个弱点,就是它不能对某个进程进行深刻分析,仅对系统的总体状况进行分析。多线程

iostat -x 查看磁盘压力

[root@adai003 ~]# iostat -x
Linux 3.10.0-514.el7.x86_64 (adai003) 	2017年07月11日 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.12    0.00    0.24    0.25    0.00   99.39

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.06    0.45    0.30    16.50     4.06    54.39     0.02   31.35   32.52   29.60   6.25   0.47
scd0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00  170.45  170.45    0.00 170.45   0.01

说明: util%:表示io等待占比,正常状况下该值和磁盘读写(r/w)成正比,若是该值很大,读写数值很小则说明磁盘存在问题,系统性能会受影响!并发

iotop 查看磁盘使用

iotop命令是一个用来监视磁盘I/O使用情况的top类工具(动态)。iotop具备与top类似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到设备的读写状况,若是你想知道每一个进程是如何使用IO的就比较麻烦,使用iotop命令能够很方便的查看。dom

[root@axiang ~]# 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          
 2342 be/4 root        0.00 B/s    0.00 B/s  0.00 %  1.00 % [kworker/0:1]
  512 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd-logind
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd -~rialize 21
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]

...
  • iotop经常使用快捷键

    • 左右箭头:改变排序方式,默认是按IO排序
    • r:改变排序顺序。
    • o:只显示有IO输出的进程。
    • p:进程/线程的显示方式的切换。
    • a:显示累积使用量。
    • q:退出。

10.7 free命令

free命令能够显示当前系统未使用的和已使用的内存数目,还能够显示被内核使用的内存缓冲区。

经常使用选项:

  • -b/k/m/g:分别以byte、KB、M、G为单位显示(默认以KB为单位)
  • -h:已适当的单位显示
  • -t:显示内存总和
[root@axiang-02 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        577M        918M        8.6M        335M        1.1G
Swap:          2.0G          0B        2.0G

  • 可用available=空闲free+缓冲、缓存

  • 内存总大小total=已用used+可用available

  • buff缓冲和cache缓存区别,所指流向不一样

    • 磁盘数据——>内存(cache)——>cpu //cache给cpu
    • cpu数据——>内存(buff)——>磁盘 //

若是占用swap表明内存不够或者程序致使内存泄漏,须要排查或添加内存

10.8 PS命令

ps命令用于报告当前系统的进程状态。能够搭配kill指令随时中断、删除没必要要的程序。ps命令是最基本同时也是很是强大的进程查看命令,使用该命令能够肯定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是能够经过执行该命令获得的。

常见用法

  • ps aux | grep xxx
  • ps aux //列出系统所有进程
[root@adai003 ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 125100  3628 ?        Ss   10:28   0:01 /usr/lib/systemd/systemd 
root         2  0.0  0.0      0     0 ?        S    10:28   0:00 [kthreadd]
……
  • S列表明进程类型
    • D:不能中断的进程
    • R:run状态的进程 (时间段内在使用CPU)
    • S:sleep状态的进程 (短暂运行的进程,如vmstat)
    • s:主进程
    • T:暂停的进程
    • Z:僵尸进程
    • <:高优先级进程
    • N:低优先级进程
    • L:内存中被锁定了内存分页
    • l:多线程进程
    • +:前台进程

[root@axiang ~]# ps aux | grep vmstat
root      2430  0.1  0.1 148308  1344 pts/0    T    17:30   0:00 vmstat 1
root      2432  0.0  0.0 112664   976 pts/0    S+   17:30   0:00 grep --color=auto vmstat

进程/线程

  • 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操做系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 运行中的进程可能具备如下三种基本状态:

    • 就绪状态(Ready):进程已得到除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程能够按多个优先级来划分队列。例如,当一个进程因为时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操做完成而进入就绪状态时,排入高优先级队列。
    • 运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其余进程能够执行时(如全部进程都在阻塞状态),一般会自动执行系统的空闲进程。
    • 阻塞状态(Blocked):因为进程等待某种条件(如I/O操做或进程同步),在条件知足以前没法继续执行。该事件发生前即便把处理机分配给该进程,也没法运行。
  • 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程本身不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的所有资源。一个线程能够建立和撤消另外一个线程,同一进程中的多个线程之间能够并发执行。因为线程之间的相互制约,导致线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每个程序都至少有一个线程,若程序只有一个线程,那就是程序自己。

  • 在单个程序中同时运行多个线程完成不一样的工做,称为多线程

    • 用户级线程:管理过程所有由用户程序完成,操做系统内核心只对进程进行管理。
    • 系统级线程(核心级线程):由操做系统内核进行管理。操做系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序能够建立、执行、撤消线程。

进程和线程关系:

mark

10.9 查看网络状态

netstat命令

netstat命令用来查看服务在网络上的通讯状态,端口

常见用法

  • netstat -lnp 查看监听端口,
    • 包含unix的socket,socket为同一台服务器进程间的通讯设置
    • 22远程端口,25邮件端口
  • netstat -lntp 只看tcp协议链接
  • netstat -an 查看tcp/ip网络链接情况
    • TIME_WAIT 表示等待下次链接
[root@axiang ~]# 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      921/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1385/master         
tcp6       0      0 :::22                   :::*                    LISTEN      921/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1385/master         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           517/chronyd         
udp6       0      0 ::1:323                 :::*                                517/chronyd         
raw6       0      0 :::58                   :::*                    7           558/NetworkManager  
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     17374    1385/master          private/lmtp
unix  2      [ ACC ]     STREAM     LISTENING     17377    1385/master          private/anvil

:proto为unix的是系统内的socket文件。
...
[root@axiang ~]# netstat -an | head
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0     52 192.168.83.131:22       192.168.83.1:49690      ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
udp        0      0 192.168.83.131:36558    61.216.153.107:123      ESTABLISHED
udp        0      0 192.168.83.131:55028    85.199.214.100:123      ESTABLISHED
...
  • 查看链接数
[root@axiang ~]# netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 	 4
ESTABLISHED 	 1  //并发数,直接影响服务器资源使用状况
  • ESTABLISHED 说明并发链接数,客户端——服务器

ss命令

ss命令用来显示处于活动状态的套接字信息。ss命令能够用来获取socket统计信息,它能够显示和netstat相似的内容。但ss的优点在于它可以显示更多更详细的有关TCP和链接状态的信息,并且比netstat更快速更高效,缺点是不会显示进程的名称。

[root@axiang ~]# ss -an
Netid State      Recv-Q Send-Q                                    Local Address:Port                                                   Peer Address:Port              
nl    UNCONN     0      0                                                     0:-192937426                                                         *                   
nl    UNCONN     0      0                                                     0:0                                                                  *                   
nl    UNCONN     0      0                                                     0:-192937426                                                         *
  • ss -an也能够查看,可是不显示进程名字

10.10 linux下抓包

tcpdump命令

tcpdump命令是一款sniffer工具,它能够打印全部通过网络接口的数据包的头信息,也可使用-w选项将数据包保存到文件中,方便之后分析。

常见用法

  • tcpdump -nn -i ens33 //第一个n表示以数字形式显示IP,若是不加该选项会显示成主机名
  • tcpdump -nn ens33 not port 22 //指定端口为非22的
  • tcpdump -nn ens33 port 22 and host 192.168.8.1 //指定多个条件 and
  • tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap //指定抓包数量和存放位置
  • tip
    • 若是面对DDos攻击,须要接入专业防攻击设备或服务
    • .cap是实际通讯数据
[root@axiang ~]# tcpdump -nn -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
21:12:01.388269 IP 192.168.83.131.22 > 192.168.83.1.49690: Flags [P.], seq 339706
21:12:01.406543 IP 192.168.83.1.49690 > 192.168.83.131.22: Flags [.], ack 212, wi

查看1.cap文件信息:

  • .cap内容没法使用cat命令查看,可以使用tcpdump -r命令查看
[root@axiang-02 ~]# tcpdump -nn -i ens33 -c 5 -w /tmp/1.cap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[root@axiang-02 ~]# tcpdump -r /tmp/1.cap
reading from file /tmp/1.cap, link-type EN10MB (Ethernet)
12:45:38.564652 IP axiang-02.ssh > 192.168.83.1.50036: Flags [P.], seq 406420592:406420740, ack 1872774135, win 294, length 148
12:45:38.565089 IP 192.168.83.1.50036 > axiang-02.ssh: Flags [.], ack 148, win 254, length 0
12:45:40.715007 IP axiang-02.41813 > 61-216-153-105.HINET-IP.hinet.net.ntp: NTPv4, Client, length 48
12:45:44.496768 IP 192.168.83.1.50036 > axiang-02.ssh: Flags [P.], seq 1:53, ack 148, win 254, length 52
12:45:44.540043 IP axiang-02.ssh > 192.168.83.1.50036: Flags [.], ack 53, win 294, length 0

tshark命令

[root@axiang-02 ~]# yum install -y wireshark

常见用法

  • 查看指定网卡80端口的1个web服务的访问状况(相似于web的访问日志):
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"

相关文章
相关标签/搜索