linux系统性能监控

CPU

中央处理器(Central Processing Unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。

CPU(Central Processing Unit,中央处理器)主要是由以下几个组成部分组成:

1.控制单元(Control Unit,CU):控制单元是CPU的核心部分之一,负责指令的读取和操作。
2.算术逻辑单元(Arithmetic Logic Unit,ALU):ALU 是CPU的另一个核心部分,它执行所有算术和逻辑运算(例如加、减、乘、除、与、或、非等)。
3.寄存器(Registers):寄存器是一个小型的高速存储器,用于存储正在处理的数据和地址,以及控制单元中的控制信号。
4.高速缓存(Cache):高速缓存是一种高速缓存存储器,用于存储最近使用的数据和指令,以便更快地访问它们。
5.总线(Bus):总线是一个用于在CPU内部和其他硬件组件(如内存、输入输出设备等)之间传输数据和控制信号的通道。
这些组成部分共同工作,组成了一个完整的CPU,用于执行计算机程序,控制各种硬件设备,以及处理各种输入输出数据。

平均负载

  最标准的说法
    1个cpu核心   1
    4个cpu核心   4
    32个cpu核心  32
  非标准的说法
    1个cpu核心   <5 说明系统很多忙,但是还可以接收
    4个cpu核心   <4*5  <20 说明系统很多忙,但是还可以接收 

memory 内存

物理内存

将物理内存看成一个大数组,每个字节都可以通过与之唯一对应的地址进行访问,这叫做物理地址。CPU通过总线发送访问物理地址的请求,从内存中读取数据或向其中写入数据。

虚拟内存

应用程序通过使用虚拟地址访问存储在内存中的数据和代码,程序执行过程中,cpu通过内存管理单元(MMU)将虚拟地址转换为物理地址。

虚拟内存是Linux管理内存的一种技术。它使得每个应用程序都认为自己拥有独立且连续的可用的内存空间(一段连续完整的地址空间),而实际上,它通常是被映射到多个物理内存段,还有部分暂时存储在外部磁盘存储器上,在需要时再加载到内存中来。

虚拟地址和进程息息相关,不同进程里的同一个虚拟地址指向的物理地址不一定一样,所以离开进程谈虚拟地址没有任何意义。

为什么需要虚拟内存?

  1. 内存(memory)资源永远都是稀缺的,当越来越多的进程需要越来越来内存时,某些进程会因为得不到内存而无法运行;
  2. 内存容易被破坏,一个进程可能误踩其他进程的内存空间;

为什么需要缓存?

程序的执行过程,首先从硬盘执行程序,存放到内存,再给cpu运算与执行。 由于内存和硬盘的速度相比cpu实在慢太多了,每执行一个程序cpu都要等待内存和硬盘,引入缓存技术便是为了解决此矛盾,缓存与cpu速度一致,cpu从缓存读取数据比cpu在内存上读取快得多,从而提升系统性能。

虚拟内存的优点

  • 更大的地址空间:并且是连续的,使得程序编写、链接更加简单

  • 进程隔离:不同进程的虚拟地址之间没有关系,所以一个进程的操作不会对其它进程造成影响

  • 数据保护:每块虚拟内存都有相应的读写属性,这样就能保护程序的代码段不被修改,数据块不能被执行等,增加了系统的安全性

  • 内存映射:有了虚拟内存之后,可以直接映射磁盘上的文件(可执行文件或动态库)到虚拟地址空间,这样可以做到物理内存延时分配,只有在需要读相应的文件的时候,才将它真正的从磁盘上加载到内存中来,而在内存吃紧的时候又可以将这部分内存清空掉,提高物理内存利用效率,并且所有这些对应用程序来说是都透明的

  • 共享内存:比如动态库,只要在内存中存储一份就可以了,然后将它映射到不同进程的虚拟地址空间中,让进程觉得自己独占了这个文件。进程间的内存共享也可以通过映射同一块物理内存到进程的不同虚拟地址空间来实现共享

  • 物理内存管理:物理地址空间全部由操作系统管理,进程无法直接分配和回收,从而系统可以更好的利用内存,平衡进程间对内存的需求

  • 其它:有了虚拟地址空间后,交换空间和COW(copy on write)等功能都能很方便的实现

Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。

Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘

free命令

-m 以MB为单位显示内存使用情况

-h  以人类能够读懂的方式显示

-s  指定间隔秒数

手工清空缓存的命令

1.仅清楚页面缓存(PageCache)

sync; echo 1> /proc/sys/vm/drop_caches

2.清楚目录项和inode

sync; echo 2> /proc/sys/vm/drop_caches

3.清楚页面缓存、目录项和inode

sync; echo 3> /proc/sys/vm/drop_caches

sync命令可以把linux缓存写进磁盘, 一般用于关机前

vm.swappiness=0 仅在内存不足的情况下--当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间

echo 0 >/proc/sys/vm/swappiness   临时修改,默认是30,物理内存只剩30%的时候,就开始使用交换分区

cat  /etc/sysctl.conf  这个目录主要是配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件

cat /proc/meminfo  是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的

OOM  全称“Out Of Memory”,翻译成中文就是“内存用完了”,进程出现OOM现象,一般都是不能提供正常的业务访问,会被内核杀死/或者会重启

内存溢出:申请的内存超出了系统能提供的内存大小,此时称之为溢出。

内存管理:

MMU将虚拟地址转化为物理地址的方式有两种

1.分段机制

将虚拟空间分为很多段,代码段,数据段,将每段分为段号,段内地址(段内偏移) 。段表存储分段信息,包括起始地址和段长。根据段表基址寄存器找到段表的位置,然后根据段号和段内地址就可以定位最终的物理地址。虚拟地址相邻的段可以不相邻,可以实现物理内存资源的离散分配,导致内存碎片

2.分页机制

将虚拟地址分成连续的,等长的虚拟页,物理页页划分为连续等长的,也分为虚拟页号和页内偏移量。查找过程基本和 分段机制一致。分页机制按照固定页的大小分配物理内存,使得物理内存资源易于管理,可有效避免分段机制外部碎片的问题。

MMU寻址过程:当MMU翻译虚拟地址,首先根据 页表基地址寄存器 中的物理地址 找到 第0级页表,然后将虚拟页号0 (第47-39位)作为页表索引,读取第0级页表项,在其中存储着下一级(第1级)页表页的物理地址,MMU按照类似方式将虚拟地址的虚拟页号1(38-30位)作为页表项,往下类推,找到第3级页表中的页表找到该虚拟地址对应的物理页号,再结合虚拟地址中的页内偏移量即可获得最终的物理地址。

换页机制:当物理内存容量不够的时候,操作系统应该把若干物理页内容写到类似磁盘这种容量更大且更加便宜的存储设备中,然后就可以回收物理页继续使用。比如应用程序A那里回收物理页P,操作系统需要将物理页p写到磁盘上的一个位置。在应用程序A中去除虚拟页V的映射,物理页P就被操作系统回收,并且分配给别的应用程序使用。此时,虚拟页v就处于已分配但是未映射至物理内存的状态。

缺页异常:应用程序访问已经分配但是未映射到物理内存的虚拟页时,就会出发却页异常。

页替换策略:当需要的内存小于某个阀值,根据页替换策略选择一个或者一些物理页换出到物理页以获得空间。页替换策略十分耗性能,因为从硬盘换到内存十分消耗性能。

页面置换算法

最佳置换(OPT)算法

当一个缺页中断发生时,对于保存在内存当中的每一个逻辑页面,计算在它的下一次访问之前,还需要等待多长时间,从中选择等待时间最长的那个,作为被置换的页面。

结论:

  • 这只是一个理想的情况,在实际系统中是无法实现的,因为操作系统无从知道每一个页面要等待多长时间以后才会再次被访问。

先进先出(FIFO)算法

选择在内存中驻留时间最长的页面并淘汰之。具体来说,系统维护着一个链表,记录了所有位于内存当中的逻辑页面。从链表的排列顺序来看,链首页面的驻留时间最长,链尾页面的驻留时间最短。当发生一个缺页中断时,把链首页面淘汰出局,并把新的页面添加到链表的末尾。

评价:

     性能较差,调出的页面有可能是经常要访问的页面,并且有Belady现象(给的物理页帧越多,产生缺少的次数越大)。FIFO算法很少单独使用。

最近最久未使用(LRU)

当一个缺页中断发生时,选择最久未使用的那个页面,并淘汰之。

评价:

     它是对最优页面置换算法的一个近似,其依据是程序的局部性原理,既在最近一小段时间(最近几条指令)内,如果某些页面被频繁地访问,那么在将来的一小段时间内。他们还可能会再一次地频繁地访问。反过来说,如果在过去某些页面长时间未被访问,那么在将来他们还可能会长时间地得不到访问。也就是根据过去推算出未来。

时钟页面置换算法(Clock)

基本思路

1)需要用到页表项当中的访问位,当一个页面被装入内存时,把该位初始化为0。然后如果这个页面被访问(读/写),则把该位置置1。

2)把各个页面组织形成环形链表(类似钟表面),把指针指向最老的页面(最先进来)。

3)当发生一个缺页中断时,考察指针所指向的最老页面。若它的访问位为0,立即淘汰;若访问位为1,则把该位置为0,然后指针往下移动一格。如此下去,直到找到被淘汰的页面,然后把指针移动到它的下一格。

最不常用算法(LFU,Least Frequently Used)

当一个缺页中断发生时,选着访问次数最少的那个页面,并淘汰之。被访问的次数也会很少。 

增加计数器会消耗硬件资源,会浪费空间,而选择次数最少的那个意味在要遍历整个链表,耗费时间,实现比较费时费力。而且当一个页面在进程开始的时使用得很多,但是以后就不再使用了,LFU还是会保留。 

LRF 和LFU区别

LRU考察的是多久未访问,时间越短越好;而LFU考察的是访问的次数或频度,访问次数越多越好。

Belady现象

在采用FIFO算法时,有时会出现分配的物理页面数增加,缺页率反而提高的异常现象 

Belady现象产生的原因: FIFO算法的置换特征与进程访问内存的动态特征时矛盾的,与置换算法的目标(即替换较少使用的页面)不一致的,因此,被他置换出去的页面并不一定是进程不会访问的。 

只有FIFO算法有Belady现象的缺陷,其他算法如LRU算法没有Belady算法这种缺陷,因为LRU算法符合一种“栈算法”的特点,所分配的物理页帧越多,则产生的缺页次数越少。 

LRU、FIFO和Clock的比较

      LRU算法和FIFO本质上都是先进先出的思路,只不过LRU时针对页面最近访问的时间来进行排序,所以需要在每一次页面访问的时候动态地调整各个页面之间的先后顺序(因为其中某个页面的最近访问时间改变了);而FIFO是针对页面进入内存的时间来进行排序的,这个时间是固定不变的,所以各个页面之间的先后顺序时固定的。如果一个页面在进入内存后没有被访问,那么他的最近访问时间就是他进入内存的时间。换句话说,如果内存当中的所有页面都未曾访问过,那么LRU算法就退化为FIFO算法。clock是使用了一些内存中的信息(访问位,脏位等)来模拟LRU算法。
     LRU算法性能较好,但系统开销较大;FIFO算法系统开销较小,但可能会发生Belady现象。因此,这种的办法就是使用clock算法,在每一次页面访问的时候,他不必动态地去调整该页面在链表中的顺序,而仅仅是做一个标记,然后等到发生缺页中断时,再把它移动到链表末尾。对于内存当中那些未被访问的页面,clock和LRU算法表现一样好;而对于那些曾经被访问过的页面,他不能像LRU算法那样,准确记录他们的位置。

disk 磁盘

IOPS:每秒对磁盘的读写次数  input  output per second  --》衡量磁盘性能的一个重要的参数--》越高越好  -->每秒的次数
 QPS:  QUERY per second  每秒查询的次数
 TPS: transaction per second  每秒传递的事务数量  

iostat

-C 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS 使用情况
-p[磁盘] 显示磁盘和分区的情况
-t 显示终端和CPU的信息
-x 显示详细信息
-V 显示版本信息

root@n01:/mywork/gotest# iostat -d -h 1 10   每s刷新一次,共刷新10次,-K表示单位为kb,-d表示只统计磁盘信息
Linux 3.10.0-1160.11.1.el7.x86_64 (n01) 	04/30/21 	_x86_64_	(8 CPU)

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
    67.28         2.8k       598.4k         0.0k       1.2G     261.2G       0.0k sda
     0.00         0.0k         0.0k         0.0k       3.2M       0.0k       0.0k sdb
     0.00         0.0k         0.0k         0.0k       2.0M       0.0k       0.0k scd0
iostat -d -x -k 1 10
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          1.56  28.31  7.80 31.49   42.51    2.92    21.26     1.46     1.16     0.03    0.79   2.62  10.28
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          2.00  20.00 381.00  7.00 12320.00  216.00  6160.00   108.00    32.31     1.75    4.50   2.17  84.20

await: 每一个IO请求处理的平均时间(单位是微秒毫秒)。这里可以 理解为IO的响应时间,一般地系统响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,一般情况下,await大于svctm,他们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统处理问题

svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值和await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢

%util 繁忙度  当达到100%时,表示磁盘的读写性能达到极限了

测试的命令

[root@localhost ~]# dd  if=/dev/zero of=/root/dd.test2  bs=1M  count=2000

dd是一个数据备份的命令
if input file 输入文件
/dev/zero 会产生零  0   
output file  输出文件
bs=1M 数据单元
count=1000 数量

df -Th 查看磁盘里已经挂载的分区的使用的情况

如何知道磁盘分区空间是否使用完?

df -Th
文件系统       类型      容量  已用  可用 已用% 挂载点
devtmpfs       devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs          tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs          tmpfs     1.9G   12M  1.9G    1% /run
tmpfs          tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda2      xfs       193G   15G  178G    8% /
/dev/sda3      ext4      4.7G   20M  4.5G    1% /sc
/dev/sda1      xfs       997M  142M  855M   15% /boot
tmpfs          tmpfs     378M     0  378M    0% /run/user/0

查看已用多少

磁盘的IO速度是否跑满?

IOPS  也就是在一秒内,磁盘进行多少次 I/O 读写  -> 数值越大越好

磁盘的读写是否很忙? 

磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了

sar

-A显示系统所有资源设备(CPU、内存、磁盘)的运行状况。
-u显示系统所有 CPU 在采样时间内的负载状态。
-P显示当前系统中指定 CPU 的使用情况。
-d显示系统所有硬盘设备在采样时间内的使用状态。
-r显示系统内存在采样时间内的使用情况。
-b显示缓冲区在采样时间内的使用情况。
-v显示 inode 节点、文件和其他内核表的统计信息。
-n显示网络运行状态,此选项后可跟 DEV(显示网络接口信息)、EDEV(显示网络错误的统计数据)、SOCK(显示套接字信息)和 FULL(等同于使用 DEV、EDEV和SOCK)等,有关更多的选项,可通过执行 man sar 命令查看。
-q显示运行列表中的进程数、进程大小、系统平均负载等。
-R显示进程在采样时的活动情况。
-y显示终端设备在采样时间的活动情况。
-w显示系统交换活动在采样时间内的状态。
[root@localhost ~]# sar -u 3 5  查看系统 CPU 的整理负载状况,每 3 秒统计一次,统计 5 次
Linux 2.6.32-431.el6.x86_64 (localhost)     10/25/2019     _x86_64_    (1 CPU)

06:18:23 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
06:18:26 AM     all     12.11      0.00      2.77      3.11      0.00     82.01
06:18:29 AM     all      6.55      0.00      2.07      0.00      0.00     91.38
06:18:32 AM     all      6.60      0.00      2.08      0.00      0.00     91.32
06:18:35 AM     all     10.21      0.00      1.76      0.00      0.00     88.03
06:18:38 AM     all      8.71      0.00      1.74      0.00      0.00     89.55
Average:        all      8.83      0.00      2.09      0.63      0.00     88.46
sar -d 10 3 –p

屏幕显示如下:

17:45:54 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

17:46:04 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

17:46:04 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

17:46:04 vg_livedvd-lv_root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

17:46:04 vg_livedvd-lv_swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

%util   繁忙度

tps   每秒钟传输(读写)的次数

IOPS  每秒总读写的次数

network 网络

端口

netstat 

安装:yum   install  net-tools -y

选项:

-anplut  :-a  all 显示所有的信息
-n  [--numeric|-n]  以数字的形式显示--》不显示名字
-u  查看udp协议
-t  查看tcp协议
-l  处于listen状态
-p  显示程序的名字 PID/Program name

参数意思:

Recv-Q:接受数据的队列  receive  queue --》内存里存放数据的临时空间
Send-Q:发送数据的队列  send  queue
Local Address
        127.0.0.1  --》loopback
        192.168.1.141 --》ens33
        0.0.0.0 --》代表这个linux服务器所有接口的ip地址--》通配符--》任意ip地址

Foreign Address
    0.0.0.0:*   --》ipv4---》代表任意ip任意端口
    :::*   --》ipv6里的任意ip任意端口
State
    有哪些状态--》三次握手、四次断开  --》tcp
    LISTEN  --》监听 --》服务器开启了某个端口,对外提供服务
    ESTABLISHED  --》建立连接
    TIME_WAIT   表示已经要断开--》自己发起的断开--》释放连接

lsof

安装: yum install lsof -y

选项:

-i 查看端口被哪个进程占用了

-p 查看某个进程加载了哪些库

 lsof  /tanziun   查看某个文件或者文件夹被哪个进程使用

[root@ecs-centos-7 ~]# lsof -i:22
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     1348 root    3u  IPv4  16698      0t0  TCP *:ssh (LISTEN)
sshd     1348 root    4u  IPv6  16700      0t0  TCP *:ssh (LISTEN)
sshd    27741 root    3u  IPv4 458958      0t0  TCP ecs-centos-7.4-64bit-20200212:ssh->113.118.121.220:42395 (ESTABLISHED)
sshd    27819 root    3u  IPv4 459250      0t0  TCP ecs-centos-7.4-64bit-20200212:ssh->113.118.121.220:19807 (ESTABLISHED)
sshd    27895 root    3u  IPv4 459828      0t0  TCP

20端口被sshd进程占用了 

[root@ecs-centos-7 ~]# lsof -p 1053
COMMAND  PID  USER   FD   TYPE             DEVICE  SIZE/OFF    NODE NAME
mysqld  1053 mysql  cwd    DIR              253,1      4096 1055765 /var/lib/mysql
mysqld  1053 mysql  rtd    DIR              253,1      4096       2 /
mysqld  1053 mysql  txt    REG              253,1 251841448  534935 /usr/sbin/mysqld
mysqld  1053 mysql  mem    REG              253,1    209512  659436 /usr/lib64/mysql/plugin/validate_password.so
mysqld  1053 mysql    1w   REG              253,1    206658  924771 /var/log/mysqld.log
mysqld  1053 mysql    2w   REG              253,1    206658  924771 /var/log/mysqld.log

列出了进程ID为 1053 相关的文件, 从结果中可以知道这个进程ID对应的进程是MySQL

ss

获取socket统计信息,它可以显示和netstat类似的内容

参数:

Usage: ss [ OPTIONS ]

       ss [ OPTIONS ] [ FILTER ]

   -h, --help           this message

   -V, --version        output version information

   -n, --numeric        don't resolve service names

   -r, --resolve       resolve host names

   -a, --all            display all sockets

   -l, --listening      display listening socket

   -o, --options       show timer information

   -e, --extended      show detailed socket information

   -m, --memory        show socket memory usage

   -p, --processes      show process using socket

   -i, --info           show internal TCP information

   -s, --summary        show socket usage summary

   -4, --ipv4          display only IP version 4 sockets

   -6, --ipv6          display only IP version 6 sockets

   -0, --packet display PACKET sockets

   -t, --tcp            display only TCP sockets

   -u, --udp            display only UDP sockets

   -d, --dccp           display only DCCP sockets

   -w, --raw            display only RAW sockets

   -x, --unix           display only Unix domain sockets

   -f, --family=FAMILY display sockets of type FAMILY

-A, --query=QUERY, --socket=QUERY

       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE      Dump raw information about TCP sockets to FILE

   -F, --filter=FILE   read filter information from FILE

       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

  -t: tcp

  -a:  all

  -l:  listening         【ss -l列出所有打开的网络连接端口】

  -s:  summary        【显示 Sockets 摘要】

  -p:  progress

  -n:  numeric         【不解析服务名称】

  -r:  resolve        【解析服务名称】

  -m: memory        【显示内存情况】

使用例子

ss -lp | grep 22 找出打开套接字/端口应用程序

ss -o state 'established'  显示所有状态为established的SMTP连接

ss dst 192.168.25.100  匹配远程地址和端口号

iptstate

以top命令类似的风格实时显示Linux内核中iptables的工作状态。输出信息可以以任何字段进行排序,可以定义状态刷新的频率和单次显示状态信息。
参数:

-b 指定输出信息的排序规则

-d 不动态的改变窗口大小

-f 过滤本地回送消息

-h 显示帮助消息

-l 将IP地址解析为域名

-L 隐藏于DNS查询相关的状态

-r<秒数> 指定刷新屏幕的频率

-R 反序排序

-s 单次运行模式,仅打印一次状态信息

-t 显示汇总信息
 

端口扫描工具

nc

可以查看端口的开放情况

安装: yum install nc -y

1) -l   用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。

2) -p  暂未用到(老版本的nc可能需要在端口号前加-p参数)

3) -s   指定发送数据的源IP地址,适用于多网卡机

4) -u   指定nc使用UDP协议,默认为TCP

5) -v   输出交互或出错信息,新手调试时尤为有用

6)-w   超时秒数,后面跟数字

7)-z   表示zero,表示扫描时不发送任何数据

案例:

编写一个脚本监控(扫描)某台服务器(你自己的虚拟机或者8.219.110.232) 10个端口的开放情况,具体端口如下:
22  80 3306 8080 6397  53  21 8000 9000 10000
每隔一秒钟报告一次

nmap

 安装: yum install nmap -y

nmap 192.168.1.1/www.baidu.com  扫描单个网络
nmap 192.168.1.1 192.168.1.2                #将扫描同个网段内不同的ip地址。

如果知道一台服务器开放了哪些端口?

运维角度: netstat 、lsof

黑客角度: nc 、 nmap

fping

类似于ping(ping是通过ICMP(网络控制信息协议InternetControl Message Protocol)协议回复请求以检测主机是否存在)。Fping与ping不同的地方在于,fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件。

选项:

-a:只显示存活主机;

-u:只显示不存活主机;

-l:循环ping
-g:通过指定起始地址与终止地址产生目标列表

目标IP地址的输入方式:

fping IP1 IP2 IP3 ...;

fping -f filename;

fping -g IP1 IP2(IP1地址开始范围,IP2地址结束范围);

curl

利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP、HTTPS、FTP 等协议

选项:

-o/--output FILE    FILE        # 把响应内容输出到指定文件
-O/--remote-name                # 以 URL 的文件名作为文件名称保存响应内容到当前目录
-C/--continue-at    OFFSET      # 断点续传, 从 offset 位置继续传输

telnet 

用于远程登录到另一台计算机的网络协议,它可以在命令行界面下使用

1. 连接到远程主机:telnet <远程主机IP地址> [端口号] 例如:telnet 192.168.0.1 80 这个命令会连接到IP地址为192.168.0.1的主机的80端口,也就是连接到Web服务器。

2. 发送命令:在连接上远程主机后,可以输入命令来执行操作。 例如:GET / HTTP/1.1 这个命令会向Web服务器发送一个HTTP请求,获取网站首页的内容。

3. 退出连接:exit或Ctrl+]命令可以退出当前的telnet连接。 例如:exit 这个命令会退出当前的telnet连接。

需要注意的是,telnet命令在现代网络中已经不太安全,因为它的数据传输是明文的,容易被黑客截获。因此,建议使用更加安全的SSH协议来进行远程登录。

看本机开放了哪些端口,哪些端口被占用:netstat 、 lsof 、 ss

看别人机器的端口: nc 、 nmap 、 telnet

网络流量

iptraf

安装: yum install iptraf -y

可以实时地监视网卡流量,可以生成各种网络统计数据,包括TCP信息、UDP统计、ICMP和OSPF信息、以太网负载信息、节点统计、IP校验和错误和其它一些信息

dstat

dstat命令不加任何参数时,会收集CPU、磁盘、网络、分页、系统的数据信息,每秒收集一次。

选项:

-n, --net   开启net统计,包括接受和发送

-N    该选项可以跟网络设备名多个用逗号隔开,如eth1,total

usr:用户空间的程序所占百分比;

sys:系统空间程序所占百分比;

idel:空闲百分比;

wai:等待磁盘I/O所消耗的百分比;

hiq:硬中断次数;

siq:软中断次数;

read:磁盘读带宽

writ:磁盘写带宽

recv:网络收包带宽

send:网络发包带宽

-- 内存分页统计:值较大表明系统正在使用大量的交换空间,通常情况下当系统已经开始用交换空间的时候,就说明你的内存已经不够用了,或者说内存非常分散,理想情况下page in(换入)和page out(换出)的值是0 0。

in: page in(换入)

out:page out(换出)

-- 其他系统信息:这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。

int:中断次数

csw:上下文切换

iftop

用于查看网络上的流量情况,包括实时速率、总流量、平均流量等,是一款实时流量监控工具。

注意,iftop命令不记录历史数据,无报表,且只能显示从程序启动到现在的总流量。它的运行需要root权限。

直接运行iftop即可启动流量监控。如下图所示:

选项:

iftop -n # 直接显示IP, 不进行DNS反解析
iftop -N # 直接显示连接埠编号, 不显示服务名称
iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 # 显示某个网段进出包流量
iftop -i eth1 指定监控的网卡,默认为第一块网卡

glances 

可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况。

Glances 会用一下几种颜色来代表状态:

· 绿色:OK(一切正常)

· 蓝色:CAREFUL(需要注意)

· 紫色:WARNING(警告)

· 红色:CRITICAL(严重)

命令行直接使用glances命令,(Glances 的默认刷新频率是 1 (秒)

nethogs

 类似于Linux的top命令的开源的命令行工具,用来按进程或程序实时统计网络带宽使用率,它可以直观的显示每个进程占用的带宽。

nethogs eth0 监控eth0网卡流量

看网络流量 -->如何知道你的服务器的网络带宽是否用完?

ethtool

查看宽带大小

[root@222 ~]# ethtool eno1
Settings for eno1:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: 100Mb/s   这里
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 1
	Transceiver: internal
	Auto-negotiation: on
	MDI-X: off (auto)
	Supports Wake-on: pumbg
	Wake-on: g
	Current message level: 0x00000007 (7)
			       drv probe link
	Link detected: yes

Speed: 100Mb/s 带宽为白兆

然后用dstat实时监控网络状态

linux与window传输文件的命令:

sz  linux - windows

rz   windows -> linux

进程

ps aux  一瞬间linux系统里进程的状态

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。

2)ps -A 显示所有程序。

3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4)ps -e 此参数的效果和指定"A"参数相同。

5)ps e 列出程序时,显示每个程序所使用的环境变量。

6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

7)ps -H 显示树状结构,表示程序间的相互关系。

8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

9)ps s 采用程序信号的格式显示程序状况。

10)ps S 列出程序时,包括已中断的子程序资料。

11)ps -t <终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。

12)ps u   以用户为主的格式来显示程序状况。

13)ps x   显示所有程序,不以终端机来区分。

14)ps -l 較長,較詳細的顯示該PID的信息

[root@fengdeyong kernel]# ps -ef|more
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 01:41 ?        00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 01:41 ?        00:00:00 [kthreadd]
root          4      2  0 01:41 ?        00:00:00 [kworker/0:0H]
root          6      2  0 01:41 ?        00:00:05 [ksoftirqd/0]
root          7      2  0 01:41 ?        00:00:00 [migration/0]
root          8      2  0 01:41 ?        00:00:00 [rcu_bh]

参数含义 

UID    用户的ID ,但输出的是用户名
PID    进程的ID
PPID    父进程的ID
C    进程占用CPU的百分比
STIME    进程启用到现在的时间
TIME    该进程实际使用CUP运行的时间
TTY    该进程在哪个终端上运行,若与终端无关,则显示?,若为pts/0等,则表示由网络连接主机进程
CMD    命令的名称和参数

top

top 查看cpu,内存,进程信息

s – 改变画面更新频率
l – 关闭或开启第一部分第一行 top 信息的表示
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N – 以 PID 的大小的顺序排列表示进程列表
P – 以 CPU 占用率大小的顺序排列进程列表
M – 以内存占用率大小的顺序排列进程列表
h – 显示帮助
n – 设置在进程列表所显示进程的数量
q – 退出 top
s – 改变画面更新周期 

    按数字 1 查看cpu每个核的使用率

    shift+<>  根据其他的列来排序
    h 查看帮助,可以使用哪些命令

[root@sc-mysql-master ~]# top -p 33638 指定监控某个进程   
[root@sc-mysql-master ~]# top -d 3  指定延迟间隔时间 
默认top是延迟1.5秒
[root@web1 init.d]# top
top - 11:24:21 up  2:03,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 177 total,   1 running, 176 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.9 us,  5.7 sy,  0.0 ni, 91.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

us  代表用户进程消耗的cpu的比例         --》对外提供服务的进程  --》老百姓进程
sy  代表操作系统的进程消耗的cpu的比例    --》公务员进程

id  代表当前cpu空闲的比例  idle 空闲

us+sy+id=100%

running --》在cpu里运行
sleeping  --》就绪和阻塞
stoped --》暂停/挂起
zombie --》僵死状态 --》僵尸进程
linux系统里创建进程的时候,会使用fork()函数去创一个进程
父进程--->fork() -->父进程和子进程

load average: 0.00, 0.02, 0.07
负载的平均值: cpu的平均负载
 0.00, 0.02, 0.07
 最近的1分钟,5分钟,15分钟的cup的平均负载

系统平均负载是处于可运行或不可中断状态的进程的平均数量 

系统平均负载是指过去的1分钟,5分钟,15分钟,处于可运行或就绪或者阻塞的状态的进程的平均数量。这是进程的平均数量,用来判断系统是否繁忙的指标,假如我们的系统是1个cpu核心,这个值超过1就说明系统比较繁忙了,但是不超过5说明还没有达到最忙的时候。  0~5以内,说明系统还可以,只要超过1就比较忙了

假如有8个cpu核心,这个值就是8 ,超过8就比较忙,但是可以承受的总值是5*8=40

通过看进程的数量来判断cpu是否忙,内存是否消耗多等 

监控本机进程:

查看那个进程在哪个cpu里运行:

  1. top -p [进程号],例如 top -p 3000
  2. 按下"F"键,使用上下键选择P = Last Used Cpu,并按下空格键,出现 “*”即代表选中,再按“q"退出。

pstree

进程树

-p 显示pid号 

pkill

用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令

pkill -9 vim 杀死所有的vim的进程

pkill -9 -t pts/0  根据终端号来杀死进程

killall

根据名字来杀死进程

[root@fengdeyong ~]# killall -9 vim
[1]   已杀死               vim liu.txt
[2]-  已杀死               vim fan.txt
[3]+  已杀死               vim luogan.txt
[root@fengdeyong ~]#

kill 

-9  告诉内核去强制删除某个进程

-2  signal 信号 interrupt 中断  ctrl +c

-1  父进程退出,会给子进程发HUP信号,内核去杀死所有 的收到hup信号的进程

-15  默认的信号  

nohup  屏蔽hup信号的 让进程自我终结  自杀

[root@fengdeyong ~]# nohup bash while.sh &
[1] 125508
[root@fengdeyong ~]# nohup: 忽略输入并把输出追加到"nohup.out"

service 服务


如何知道你的linux系统是否繁忙? 

1.看cpu
2.看平均负载
3.看内存
4.看网络流量 -->如何知道你的服务器的网络带宽是否用完?

    阿里云上的你的服务器的网络带宽是多少?

    共享1M/10MB
    1个用户消耗1k --》1000个用户  消耗你1M


计算机网络:
    网卡的速度:1000Mb  MB
    10000Mb / 8 = 1250MB
    1000Mb/8 = 125MB

    电信的出口带宽是300Mb / 8 = 37MB
dstat
iftop
iptraf
glances

nethogs 可以看某个进程消耗多少网络带宽的

5.看nginx的并发连接数量

    看nginx内部的状态统计功能
top
free

进程有什么组成?
    process: 进程: 有pcb+code+data
    pcb是进程控制块 process control block: 有pid,uid,状态,优先级,代码在内存里的地址等信息
                pcb是感知进程存在的唯一凭证--》进程的身份证
       内核会保留一个数据结构记录所有的pcb信息

进程的pcb和代码+数据是否是分开存放的?pcb存放在哪里 

 在Linux系统中,进程的PCB(进程控制块)和代码+数据是分开存放的。PCB存放在内核空间,而代码+数据存放在进程的虚拟地址空间中。在Linux系统中,每个进程都有一个对应的PCB,它们被存放在内核的进程表中。
进程虚拟地址空间:指每个进程在运行时所拥有的独立的虚拟地址空间,该空间包含了进程所需要的所有代码、数据和堆栈等信息,是进程运行时所使用的地址空间。在进程虚拟地址空间中,每个进程都有自己独立的地址空间,互相之间不会干扰,这样可以保证每个进程的代码和数据都是相互独立的。同时,进程虚拟地址空间还可以实现内存保护、虚拟内存等功能,提高了系统的安全性和可靠性。
 内核空间:操作系统中的一部分内存空间,用于存放操作系统内核和驱动程序等核心系统组件的代码和数据。在内核空间中,操作系统具有完全的系统权限和访问权限,可以直接访问系统硬件资源和其他进程的内存空间。与之相对的是用户空间,用户空间是用于运行应用程序的内存空间,其访问权限和系统权限受到限制。内核空间和用户空间之间通过系统调用接口实现交互。——by chatgpt

谁去创建进程?

内核 

linux上进程的5种状态?

1. 运行(正在运行或在运行队列中等待)

2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)

3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)

4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

进程创建的过程是怎么样的?

输入mkdir /test这条指令背后发生的过程

linux系统中一条指令在CPU里如何执行?

 

 僵尸进程:  为什么叫僵尸进程,是pcb存在还是代码和数据都存在?

 僵尸进程(Zombie Process)是一种特殊的进程状态,通常是指一个子进程(Child Process)已经终止运行,但其父进程(Parent Process)并未调用 wait() 或 waitpid() 系统调用来获取该子进程的终止状态,从而使得该子进程的任务结构体(Task Structure,也称为进程控制块 Process Control Block,PCB)仍然留存在系统中,无法被完全清除。这种状态下的进程就被称为僵尸进程。

僵尸进程: 子进程退出,父进程没有使用wait()系统调用去回收子进程的pcb,导致子进程的信息任然在内核空间里,消耗了内存空间,死而不化像僵尸一样存在。

 由于僵尸进程占用的系统资源很少,因此僵尸进程本身不会对系统造成很大的影响。但是如果僵尸进程数量过多,就会占用大量系统资源,从而导致系统性能下降甚至崩溃。

在 Linux 系统中,僵尸进程的 PCB 仍然存在,但其代码和数据已经被清除,仅保留一些基本信息(如进程 ID、终止状态等)。这些信息通常保存在内核中,等待父进程调用 wait() 或 waitpid() 系统调用来获取。当父进程调用这些函数时,内核会将僵尸进程的 PCB 从系统中删除,并将保存的终止状态传递给父进程,从而完成僵尸进程的清除。 

在僵尸进程中:子进程会认操作系统的pid为1的进程为父进程

如何清理僵尸进程?

一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

kill -9

进程和线程的关系

进程里包含很多线程

线程: 是进程的内部的单元
  一个进程里至少有一个线程
进程process
线程thread  :tcb + data +code
线程的优势:
  1.更加节约内存
  2.上下文切换的时候更加快
线程的缺点:
  不够稳定,一个进程退出/杀死,整个进程里的线程都会被杀死了

上下文切换

什么是多路复用?
IO多路复用(IO Multiplexing)一种同步IO模型,单个进程/线程就可以同时处理多个IO请求。一个进程/线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个进程/线程。
一个进程/线程虽然任一时刻只能处理一个请求,但是处理每个请求的事件时,耗时控制在 1 毫秒以内,这样 1 秒内就可以处理上千个请求,把时间拉长来看,多个请求复用了一个进程/线程,这就是多路复用,这种思想很类似一个 CPU 并发多个进程,所以也叫做时分多路复用。
IO 多路复用是一种同步 IO 模型,实现一个线程可以监视多个文件句柄。一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出 cpu。IO 是指网络 IO,多路指多个TCP连接(即 socket 或者 channel),复用指复用一个或几个线程。

IO多路复用:解决了大并发连接的问题

进程和进程之间通信的方式有多少种?

  1. 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  2. 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  3. 共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
  4. 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  5. 套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
  6. 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

cpu的调度算法

1.First Come,First Served(FCFS)

先来先服务的调度算法,哪个任务先进来,就为哪个任务先服务

 我们上面说过,周转时间=任务结束的时间-任务到达的时间,因此,我们算一算以上四个任务的平均周转时间。进程A到达时间为0时刻,进程B到达时间为1时刻,进程C到达时间为2时刻,进程D到达时间为3时刻,因此,按照FCFS调度算法,我们一词调度A、B、C、D.

四个任务的平均周转时间=(5-0)+(65-1)+(165-2)+(175-3) / 4 = 101. 

因为一个系统中,可能短任务占的比重较多,那些后来进入的短任务,就得等前面一大堆的任务执行完后,CPU才为这些短任务服务,这样的话,很多短任务即使服务时间短,但是它们的周转时间都比较长。 

2.SJF(Short Job First,短作业优先) 

 哪个任务的服务时间短就先调度哪个

进程A的服务时间为5,进程B的服务时间为60,进程C的服务时间为100,进程D的服务时间为10,因此,按照短作业优先的CPU调度算法,我们依次调度A、D、B、C.

这四个任务的平均周转时间=(5-0)+(15-3)+(75-1)+(175-2) / 4 = 66.

如果任务C这个任务是急需要响应的,比如是word文档任务,那么它就要快速响应用户的按键输入请求,就是要求其响应时间要小。很明显,上面的SJF调度策略没有考虑到响应时间这个问题,使得任务C仅仅是周转时间短,而下响应时间较长(必须等A、D、B任务结束后才会响应C)。

3.RR算法(按时间片来轮转调度)

按时间片轮转的调度算法是设置一个时间片,比如为10的CPU时间,然后不停地在A、B、C、D四个进程中切换,每个进程执行时间10,时间到了就切换到下一个进程执行时间10,直到全部执行完毕。  

为每个进程分配10的CPU时间,轮转调度执行,这样每个进程的响应时间就变小了。

4.多级反馈队列算法FB

定义前台任务和后台任务两条队列,前台使用RR算法,后台使用SJF算法,只有前台任务没有时才调度后台任务。

5.cfs 完全公平调度算法

1、实际运行时间:

实际运行时间 = 调度周期 * 进程权重 / 所有进程权重之和
  • 调度周期:是指所有可进程运行一遍所需要的时间。
  • 进程权重:依据进程的重要性,分配给每个进程不同的权重。

2、虚拟运行时间:

虚拟运行时间 = 实际运行时间 * 1024 / 进程权重 = (调度周期 * 进程权重 / 所有进程权重之和) * 1024 / 进程权重

= 调度周期 * 1024 / 所有进程总权重

从上面的公式可以看出,在一个调度周期里,所有进程的 虚拟运行时间 是相同的。所以在进程调度时,只需要找到 虚拟运行时间 最小的进程调度运行即可。 

 

 进程会如何创建出来的?进程的组成   fork

 fork过程

cup 使用100%  内存使用率100% 有什么后果? 

  卡顿
  老用户卡顿,新用户连接不进来
  业务程序异常:老用户卡顿,新用户连接不进来

/proc文件系统:

/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段


Linux内核:操作系统内部最核心的软件
作用:
    1.对cpu进行调度管理
    2.对文件系统(磁盘和分区)进行管理
    3.内存的分配
    4.进程的管理
    5.其他的硬件的管理(网卡、显卡、声卡等)


proc --》process 处理
内核去处理任务的时候,保存的信息都存放/proc目录--》文件系统
/proc 是一个挂载点,对应内存里一块空间。停电/proc文件系统里的内容会丢失

[root@localhost ~]# df -Tha
文件系统            类型        容量  已用  可用 已用% 挂载点
sysfs               sysfs          0     0     0     - /sys
proc                proc           0     0     0     - /proc

进程的特征:

动态性(进程最基本的特征):进程是程序的一次执行过程,是动态地产生、变化和消亡的

并发性:内存中有多个进程实体,各个进程可并发执行

独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位

异步性:各进程按各自独立的、不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题

结构性:每个进程都会配置一个PCB,结构上看,进程由程序段、数据段、PCB组成

 进程的状态:

三种基本状态:

运行态(Running):占有CPU,并在CPU上运行

就绪态(Ready):已经具备运行条件,但由于没有空闲CPU,而暂时不能运行

阻塞态(Waiting/Blocked, 又称:等待态):因等待某一事件而暂时不能运行

另外两种状态:

创建态(New,又称:新建态):进程正在被创建,操作系统为进程分配资源、初始化PCB

终止态(Terminated,又称:结束态):进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB

线程的优点和特性

进程间并发,开销很大

当切换进程时,需要保存 / 恢复进程运行环境,还需要切换内存地址空间(更新快表、更新缓存)

线程间并发,开销更小

同一进程内的各个线程间并发,不需要切换进程运行环境和内存地址空间,省时省力

引入线程机制后,并发带来的系统开销降低,系统并发性提升

注意:从属于不同进程的线程间通信,也必须请求操作系统服务!

引入线程前,进程既是资源分配的基本单位,也是调度的基本单位。

引入线程后,进程是资源分配的基本单位,线程是调度的基本单位。线程也有运行态、就绪态、阻塞态

在多CPU环境下,各个线程也可以分派到不同的CPU上并行地执行。

线程几乎不拥有资源,只拥有极少量的资源(线程控制块TCB、寄存器信息、堆栈等)

线程的重要特点:线程是处理机调度的单位,进程是资源分配的单位;同一进程的各线程共享进程拥有的资源;同一进程内的线程切换不会导致进程切换

引入线程机制后,有什么变化?

资源分配、处理及调度;并发性;(实现并发的)系统开销

内核参数优化

虚拟内存的一个优化

[root@sanchuang-cs ~]# echo 0 >/proc/sys/vm/swappiness 
[root@sanchuang-cs ~]# cat /proc/sys/vm/swappiness 
0

swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

路由功能开启

[root@localhost proc]# cat /proc/sys/net/ipv4/ip_forward  查看内核里的路由功能是否开启
0
[root@sanchuang-cs ~]# echo 1 >>/proc/sys/net/ipv4/ip_forward
[root@sanchuang-cs ~]# cat /proc/sys/net/ipv4/ip_forward
1

限制可以启动多少个进程

ulimit -u 30000

永久修改内核对进程的限制

/etc/security/limit.conf   

*  soft   nofile  100000
*  hard   nofile  100000

清楚缓存buffer和cache

[root@fengdeyong ~]# echo 3 >/proc/sys/vm/drop_caches

网络模块

阿里云服务器的内核参数优化

[root@Mingo ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120


# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2


# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
kernel.sysrq=1
[root@Mingo ~]# 

 sysctl -p 从配置文件“/etc/sysctl.conf”加载内核参数设置

 限制一个用户启动的进程可以使用多少内存

1.进入limits.conf文件的命令

sudo video /etc/security/limits. conf
1


(1)进入之后想要限制某个用户(arms)的内存使用量不超过10个G

@adms hard  rss 11000000
1


(2)进入之后想要限制全部用户的内存使用量不超过20个G

*hard rss 21000000


常用命令

top

top 查看cpu,内存,进程信息

s – 改变画面更新频率
l – 关闭或开启第一部分第一行 top 信息的表示
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N – 以 PID 的大小的顺序排列表示进程列表
P – 以 CPU 占用率大小的顺序排列进程列表
M – 以内存占用率大小的顺序排列进程列表
h – 显示帮助
n – 设置在进程列表所显示进程的数量
q – 退出 top
s – 改变画面更新周期 

    按数字 1 查看cpu每个核的使用率

    shift+<>  根据其他的列来排序
    h 查看帮助,可以使用哪些命令

[root@sc-mysql-master ~]# top -p 33638 指定监控某个进程   
[root@sc-mysql-master ~]# top -d 3  指定延迟间隔时间 
默认top是延迟1.5秒
[root@web1 init.d]# top
top - 11:24:21 up  2:03,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 177 total,   1 running, 176 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.9 us,  5.7 sy,  0.0 ni, 91.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

us  代表用户进程消耗的cpu的比例         --》对外提供服务的进程  --》老百姓进程
sy  代表操作系统的进程消耗的cpu的比例    --》公务员进程

id  代表当前cpu空闲的比例  idle 空闲

us+sy+id=100%

running --》在cpu里运行
sleeping  --》就绪和阻塞
stoped --》暂停/挂起
zombie --》僵死状态 --》僵尸进程
linux系统里创建进程的时候,会使用fork()函数去创一个进程
父进程--->fork() -->父进程和子进程

dd  备份工具,可以备份磁盘里的数据
if=/dev/zero   input file 输入文件是/dev/zero   零产生器文件
of  output file  输出文件

load average: 0.00, 0.02, 0.07
负载的平均值: cpu的平均负载
 0.00, 0.02, 0.07
 最近的1分钟,5分钟,15分钟的cup的平均负载

系统平均负载是处于可运行或不可中断状态的进程的平均数量 

系统平均负载是指过去的1分钟,5分钟,15分钟,处于可运行或就绪或者阻塞的状态的进程的平均数量。这是进程的平均数量,用来判断系统是否繁忙的指标,假如我们的系统是1个cpu核心,这个值超过1就说明系统比较繁忙了,但是不超过5说明还没有达到最忙的时候。  0~5以内,说明系统还可以,只要超过1就比较忙了

假如有8个cpu核心,这个值就是8 ,超过8就比较忙,但是可以承受的总值是5*8=40

通过看进程的数量来判断cpu是否忙,内存是否消耗多等 

[root@sc-server ~]# dd  if=/dev/zero   of=sc.dd    模拟对磁盘进行大规范的IO 
^C记录了10328611+0 的读入
记录了10328610+0 的写出
5288248320字节(5.3 GB)已复制,55.3087 秒,95.6 MB/秒

[root@lb-1 nginx]# top -n 1  刷新1次就退出

top命令中各个参数代表的意思:

PID:进程ID,进程的唯一标识符

USER:进程所有者的实际用户名。

PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。

NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR:SHR是进程使用的共享内存。共享内存大小,单位kb

S:这个是进程的状态。它有以下不同的值:

  • D - 不可中断的睡眠态。
  • R – 运行态
  • S – 睡眠态
  • T – 被跟踪或已停止
  • Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

在top基本视图中,敲击”f”进入另一个视图,在这里可以编辑基本视图中的显示字段: 

如何查看那个进程在那个cpu里运行:top -> f -> P -> 空格 -> q退出

pstree

进程树

-p 显示pid号 

 jobs

查看当前终端放入后台的工作

-l(L 的小写)列出进程的 PID 号。
-n只列出上次发出通知后改变了状态的进程。
-p只列出进程的 PID 号。
-r只列出运行中的进程。
-s只列出已停止的进程。

fg 

 将后台中的命令调至前台继续运行

ctrl + z  将一个正在前台执行的命令放到后台,并且暂停 

dmidecode 

 在Linux系统下获取有关硬件方面的信息。

-d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。
-h:显示帮助信息。
-s:只显示指定DMI字符串的信息。(string)
-t:只显示指定条目的信息。(type)
-u:显示未解码的原始条目内容。
--dump-bin file:将DMI数据转储到一个二进制文件中。
--from-dump FILE:从一个二进制文件读取DMI数据。
-V:显示版本信息。

查看服务器型号:dmidecode | grep 'Product Name'
查看主板的序列号:dmidecode |grep 'Serial Number'
查看系统序列号:dmidecode -s system-serial-number
查看内存信息:dmidecode -t memory
查看OEM信息:dmidecode -t 11

vmstat

[root@web1 init.d]# vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 3406284   2160 202176    0    0    14     5   43   63  0  0 99  0  0

netstat

安装:yum   install  net-tools -y

选项:

-anplut  :-a  all 显示所有的信息
-n  [--numeric|-n]  以数字的形式显示--》不显示名字
-u  查看udp协议
-t  查看tcp协议
-l  处于listen状态
-p  显示程序的名字 PID/Program name

参数意思:

Recv-Q:接受数据的队列  receive  queue --》内存里存放数据的临时空间
Send-Q:发送数据的队列  send  queue
Local Address
        127.0.0.1  --》loopback
        192.168.1.141 --》ens33
        0.0.0.0 --》代表这个linux服务器所有接口的ip地址--》通配符--》任意ip地址

Foreign Address
    0.0.0.0:*   --》ipv4---》代表任意ip任意端口
    :::*   --》ipv6里的任意ip任意端口
State
    有哪些状态--》三次握手、四次断开  --》tcp
    LISTEN  --》监听 --》服务器开启了某个端口,对外提供服务
    ESTABLISHED  --》建立连接
    TIME_WAIT   表示已经要断开--》自己发起的断开--》释放连接

dd

 dd  if=/dev/zero  of=/test.dd  bs=1M  count=1000  模拟大量的数据产生,往磁盘里写

dd是一个数据备份的命令
if input file 输入文件
/dev/zero 会产生零  0   
output file  输出文件
bs=1M 数据单元
count=1000 数量

netdata  全能

安装:yum install netdata

[root@sanchuang netdata]# service netdata restart
Redirecting to /bin/systemctl restart netdata.service
[root@sanchuang netdata]# lsof -i:19999
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
netdata 6663 netdata    5u  IPv4 111990      0t0  TCP *:dnp-sec (LISTEN)
[root@sanchuang netdata]#

http://host:19999/

只能看本机资源消耗

dstat   全能命令

 dstat命令不加任何参数时,会收集CPU、磁盘、网络、分页、系统的数据信息,每秒收集一次。

选项:

-n, --net   开启net统计,包括接受和发送

-N    该选项可以跟网络设备名多个用逗号隔开,如eth1,total

usr:用户空间的程序所占百分比;

sys:系统空间程序所占百分比;

idel:空闲百分比;

wai:等待磁盘I/O所消耗的百分比;

hiq:硬中断次数;

siq:软中断次数;

read:磁盘读带宽

writ:磁盘写带宽

recv:网络收包带宽

send:网络发包带宽

-- 内存分页统计:值较大表明系统正在使用大量的交换空间,通常情况下当系统已经开始用交换空间的时候,就说明你的内存已经不够用了,或者说内存非常分散,理想情况下page in(换入)和page out(换出)的值是0 0。

in: page in(换入)

out:page out(换出)

-- 其他系统信息:这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。

int:中断次数

csw:上下文切换

[root@fengdeyong ~]# dstat  --top-cpu  --top-mem --top-io  --output /root/dstat_monitor.csv
[root@sc-mysql-master ~]# dstat  --top-cpu  --top-mem --top-io
[root@docker1 ~]# dstat -N ens33  查看ens33网卡的流量
dstat -am  显示更加丰富的信息

iostat

命令格式:   iostat 参数 时间 次数

命令参数:

-C 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS 使用情况
-p[磁盘] 显示磁盘和分区的情况
-t 显示终端和CPU的信息
-x 显示详细信息
-V 显示版本信息 

root@n01:/mywork/gotest# iostat -d -h 1 10   每s刷新一次,共刷新10次,-K表示单位为kb,-d表示只统计磁盘信息
Linux 3.10.0-1160.11.1.el7.x86_64 (n01) 	04/30/21 	_x86_64_	(8 CPU)

      tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd Device
    67.28         2.8k       598.4k         0.0k       1.2G     261.2G       0.0k sda
     0.00         0.0k         0.0k         0.0k       3.2M       0.0k       0.0k sdb
     0.00         0.0k         0.0k         0.0k       2.0M       0.0k       0.0k scd0
iostat -d -x -k 1 10 每s刷新一次,共刷新10次,-K表示单位为kb,-d表示只统计磁盘信息
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          1.56  28.31  7.80 31.49   42.51    2.92    21.26     1.46     1.16     0.03    0.79   2.62  10.28
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          2.00  20.00 381.00  7.00 12320.00  216.00  6160.00   108.00    32.31     1.75    4.50   2.17  84.20

 %util 繁忙度  当达到100%时,表示磁盘的读写性能达到极限了

测试的命令

[root@localhost ~]# dd  if=/dev/zero of=/root/dd.test2  bs=1M  count=2000

dd是一个数据备份的命令
if input file 输入文件
/dev/zero 会产生零  0   
output file  输出文件
bs=1M 数据单元
count=1000 数量

sar  全能命令

安装: yum install sysstat -y

 命令格式:  sar [options] [-o filename] interval [count]

  • -o filename:其中,filename 为文件名,此选项表示将命令结果以二进制格式存放在文件中;
  • interval:表示采样间隔时间,该参数必须手动设置;
  • count:表示采样次数,是可选参数,其默认值为 1;
  • options:为命令行选项,由于 sar 命令提供的选项很多,这里不再一一介绍,仅列举出常用的一些选项及对应的功能,如表 1 所示。

选项:

-A显示系统所有资源设备(CPU、内存、磁盘)的运行状况。
-u显示系统所有 CPU 在采样时间内的负载状态。
-P显示当前系统中指定 CPU 的使用情况。
-d显示系统所有硬盘设备在采样时间内的使用状态。
-r显示系统内存在采样时间内的使用情况。
-b显示缓冲区在采样时间内的使用情况。
-v显示 inode 节点、文件和其他内核表的统计信息。
-n显示网络运行状态,此选项后可跟 DEV(显示网络接口信息)、EDEV(显示网络错误的统计数据)、SOCK(显示套接字信息)和 FULL(等同于使用 DEV、EDEV和SOCK)等,有关更多的选项,可通过执行 man sar 命令查看。
-q显示运行列表中的进程数、进程大小、系统平均负载等。
-R显示进程在采样时的活动情况。
-y显示终端设备在采样时间的活动情况。
-w显示系统交换活动在采样时间内的状态。
[root@localhost ~]# sar -u 3 5  查看系统 CPU 的整理负载状况,每 3 秒统计一次,统计 5 次
Linux 2.6.32-431.el6.x86_64 (localhost)     10/25/2019     _x86_64_    (1 CPU)

06:18:23 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
06:18:26 AM     all     12.11      0.00      2.77      3.11      0.00     82.01
06:18:29 AM     all      6.55      0.00      2.07      0.00      0.00     91.38
06:18:32 AM     all      6.60      0.00      2.08      0.00      0.00     91.32
06:18:35 AM     all     10.21      0.00      1.76      0.00      0.00     88.03
06:18:38 AM     all      8.71      0.00      1.74      0.00      0.00     89.55
Average:        all      8.83      0.00      2.09      0.63      0.00     88.46

htop

 是top命令的升级版本,与Linux传统的top比较的话,htop人性化并且还支持鼠标操作!

安装:

yum  install epel-release -y  安装第3方的yum源仓库--》里面有很多的软件--》可以去下载使用
yum  instal  htop -y

iftop

用于查看网络上的流量情况,包括实时速率、总流量、平均流量等,是一款实时流量监控工具。

注意,iftop命令不记录历史数据,无报表,且只能显示从程序启动到现在的总流量。它的运行需要root权限。

直接运行iftop即可启动流量监控。如下图所示:

选项:

iftop -n # 直接显示IP, 不进行DNS反解析
iftop -N # 直接显示连接埠编号, 不显示服务名称
iftop -F 192.168.1.0/24 or 192.168.1.0/255.255.255.0 # 显示某个网段进出包流量
iftop -i eth1 指定监控的网卡,默认为第一块网卡

iptraf

安装: yum install iptraf -y

可以实时地监视网卡流量,可以生成各种网络统计数据,包括TCP信息、UDP统计、ICMP和OSPF信息、以太网负载信息、节点统计、IP校验和错误和其它一些信息

glances   全能命令

可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况。

Glances 会用一下几种颜色来代表状态:

· 绿色:OK(一切正常)

· 蓝色:CAREFUL(需要注意)

· 紫色:WARNING(警告)

· 红色:CRITICAL(严重)

命令行直接使用glances命令,(Glances 的默认刷新频率是 1 (秒)

nethogs 

 类似于Linux的top命令的开源的命令行工具,用来按进程或程序实时统计网络带宽使用率,它可以直观的显示每个进程占用的带宽。

nethogs eth0 监控eth0网卡流量

nmcli 

查看所有的网络连接的情况,是否被networkmanager管理
NetworkManager 是centos7/8里管理网络的服务
nmcli 是去管理网络的客户端命令  NetworkManager  client
        功能:
            1.激活和禁用网卡
            2.查看/修改网络的ip地址,dns,网关 

[root@sc-server ~]# nmcli n  查看你的网络是否启用
enabled
[root@sc-server ~]# 
[root@sc-server ~]# nmcli n off  禁用网络功能 关闭所有的网络连接
[root@sc-server ~]# nmcli n on   启用网络功能 开启所有的网络连接

[root@slave-mysql ~]# nmcli  c  查看所有的网络的连接情况
NAME        UUID                                  TYPE      DEVICE 
ens33       c96bc909-188e-ec64-3a96-6a90982b08ad  ethernet  ens33  
ens37       4a5516a4-dfa4-24af-b1c4-e843e312e2fd  ethernet  ens37  
有线连接 1  a0953d48-3a24-36d3-b388-fe27b3f12b93  ethernet  --    

pidof 

查找指定名称的进程的进程号ID号
与ps命令相似

选项:

-s:仅返回一个进程号;

-c:仅显示具有相同“root”目录的进程;

-x:显示由脚本开启的进程;

-o:指定不显示的进程ID。

[root@localhost aaa]# pidof sshd
3963 1222
[root@zhhs aaa]# ps -ef |grep sshd | grep -v grep
root      1222     1  0 Jul06 ?        00:00:00 /usr/sbin/sshd
root      3963  1222  0 09:43 ?        00:00:00 sshd: root@pts/0 

ps aux

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。

2)ps -A 显示所有程序。

3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4)ps -e 此参数的效果和指定"A"参数相同。

5)ps e 列出程序时,显示每个程序所使用的环境变量。

6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

7)ps -H 显示树状结构,表示程序间的相互关系。

8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

9)ps s 采用程序信号的格式显示程序状况。

10)ps S 列出程序时,包括已中断的子程序资料。

11)ps -t <终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。

12)ps u   以用户为主的格式来显示程序状况。

13)ps x   显示所有程序,不以终端机来区分。

14)ps -l 較長,較詳細的顯示該PID的信息

[root@fengdeyong kernel]# ps -ef|more
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 01:41 ?        00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 01:41 ?        00:00:00 [kthreadd]
root          4      2  0 01:41 ?        00:00:00 [kworker/0:0H]
root          6      2  0 01:41 ?        00:00:05 [ksoftirqd/0]
root          7      2  0 01:41 ?        00:00:00 [migration/0]
root          8      2  0 01:41 ?        00:00:00 [rcu_bh]

参数含义 

UID    用户的ID ,但输出的是用户名
PID    进程的ID
PPID    父进程的ID
C    进程占用CPU的百分比
STIME    进程启用到现在的时间
TIME    该进程实际使用CUP运行的时间
TTY    该进程在哪个终端上运行,若与终端无关,则显示?,若为pts/0等,则表示由网络连接主机进程
CMD    命令的名称和参数
 

kill

[root@fengdeyong ~]# kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH  29) SIGIO 30) SIGPWR
31) SIGSYS  34) SIGRTMIN  35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX  

-9  告诉内核去强制删除某个进程

-2  signal 信号 interrupt 中断  ctrl +c

-1  父进程退出,会给子进程发HUP信号,内核去杀死所有 的收到hup信号的进程

-15  默认的信号  

nohup  屏蔽hup信号的 让进程自我终结  自杀

信号:  是进程和进程之间通信的方式

hup信号的作用: 告诉内核去杀死session相关的子进程

pkill

用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程,类似于 killall 命令

pkill -9 vim 杀死所有的vim的进程

pkill -9 -t pts/0  根据终端号来杀死进程

killall

根据名字来杀死进程

[root@fengdeyong ~]# killall -9 vim
[1]   已杀死               vim liu.txt
[2]-  已杀死               vim fan.txt
[3]+  已杀死               vim luogan.txt
[root@fengdeyong ~]#

ipstate

以top命令类似的风格实时显示Linux内核中iptables的工作状态。输出信息可以以任何字段进行排序,可以定义状态刷新的频率和单次显示状态信息。
参数:

-b 指定输出信息的排序规则

-d 不动态的改变窗口大小

-f 过滤本地回送消息

-h 显示帮助消息

-l 将IP地址解析为域名

-L 隐藏于DNS查询相关的状态

-r<秒数> 指定刷新屏幕的频率

-R 反序排序

-s 单次运行模式,仅打印一次状态信息

-t 显示汇总信息

ss 

获取socket统计信息,它可以显示和netstat类似的内容

参数:

Usage: ss [ OPTIONS ]

       ss [ OPTIONS ] [ FILTER ]

   -h, --help           this message

   -V, --version        output version information

   -n, --numeric        don't resolve service names

   -r, --resolve       resolve host names

   -a, --all            display all sockets

   -l, --listening      display listening socket

   -o, --options       show timer information

   -e, --extended      show detailed socket information

   -m, --memory        show socket memory usage

   -p, --processes      show process using socket

   -i, --info           show internal TCP information

   -s, --summary        show socket usage summary

   -4, --ipv4          display only IP version 4 sockets

   -6, --ipv6          display only IP version 6 sockets

   -0, --packet display PACKET sockets

   -t, --tcp            display only TCP sockets

   -u, --udp            display only UDP sockets

   -d, --dccp           display only DCCP sockets

   -w, --raw            display only RAW sockets

   -x, --unix           display only Unix domain sockets

   -f, --family=FAMILY display sockets of type FAMILY

-A, --query=QUERY, --socket=QUERY

       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE      Dump raw information about TCP sockets to FILE

   -F, --filter=FILE   read filter information from FILE

       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

  -t: tcp

  -a:  all

  -l:  listening         【ss -l列出所有打开的网络连接端口】

  -s:  summary        【显示 Sockets 摘要】

  -p:  progress

  -n:  numeric         【不解析服务名称】

  -r:  resolve        【解析服务名称】

  -m: memory        【显示内存情况】

使用例子

ss -lp | grep 22 找出打开套接字/端口应用程序

ss -o state 'established'  显示所有状态为established的SMTP连接

ss dst 192.168.25.100  匹配远程地址和端口号

lsof

安装: yum install lsof -y

选项:

-i 查看端口被哪个进程占用了

-p 查看某个进程加载了哪些库

 lsof  /tanziun   查看某个文件或者文件夹被哪个进程使用

[root@ecs-centos-7 ~]# lsof -i:22
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     1348 root    3u  IPv4  16698      0t0  TCP *:ssh (LISTEN)
sshd     1348 root    4u  IPv6  16700      0t0  TCP *:ssh (LISTEN)
sshd    27741 root    3u  IPv4 458958      0t0  TCP ecs-centos-7.4-64bit-20200212:ssh->113.118.121.220:42395 (ESTABLISHED)
sshd    27819 root    3u  IPv4 459250      0t0  TCP ecs-centos-7.4-64bit-20200212:ssh->113.118.121.220:19807 (ESTABLISHED)
sshd    27895 root    3u  IPv4 459828      0t0  TCP

20端口被sshd进程占用了 

[root@ecs-centos-7 ~]# lsof -p 1053
COMMAND  PID  USER   FD   TYPE             DEVICE  SIZE/OFF    NODE NAME
mysqld  1053 mysql  cwd    DIR              253,1      4096 1055765 /var/lib/mysql
mysqld  1053 mysql  rtd    DIR              253,1      4096       2 /
mysqld  1053 mysql  txt    REG              253,1 251841448  534935 /usr/sbin/mysqld
mysqld  1053 mysql  mem    REG              253,1    209512  659436 /usr/lib64/mysql/plugin/validate_password.so
mysqld  1053 mysql    1w   REG              253,1    206658  924771 /var/log/mysqld.log
mysqld  1053 mysql    2w   REG              253,1    206658  924771 /var/log/mysqld.log

列出了进程ID为 1053 相关的文件, 从结果中可以知道这个进程ID对应的进程是MySQL

lscpu

 描述:
  此命令用来显示cpu的相关信息
  lscpu从sysfs和/proc/cpuinfo收集cpu体系结构信息,命令的输出比较易读
  命令输出的信息包含cpu数量,线程,核数,套接字和Nom-Uniform Memeor Access(NUMA),缓存等
  不是所有的列都支持所有的架构,如果指定了不支持的列,那么lscpu将打印列,但不显示数据

 语法:
  lscpu [-a|-b|-c] [-x] [-s directory] [-e [=list]|-p [=list]]
  lscpu -h|-V

参数选项:
     -a, –all: 包含上线和下线的cpu的数量,此选项只能与选项e或-p一起指定
     -b, –online: 只显示出上线的cpu数量,此选项只能与选项e或者-p一起指定
     -c, –offline: 只显示出离线的cpu数量,此选项只能与选项e或者-p一起指定
     -e, –extended [=list]: 以人性化的格式显示cpu信息,如果list参数省略,输出所有可用数据的列,在指定了list参数时,选项的字符串、等号(=)和列表必须不包含任何空格或其他空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’
  -h, –help:帮助
  -p, –parse [=list]: 优化命令输出,便于分析.如果省略list,则命令的输出与早期版本的lscpu兼容,兼容格式以两个逗号用于分隔cpu缓存列,如果没有发现cpu缓存,则省略缓存列,如果使用list参数,则缓存列以冒号(:)分隔。在指定了list参数时,选项的字符串、等号(=)和列表必须不包含空格或者其它空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’
  -s, –sysroot directory: 为一个Linux实例收集CPU数据,而不是发出lscpu命令的实例。指定的目录是要检查Linux实例的系统根
  -x, –hex:使用十六进制来表示cpu集合,默认情况是打印列表格式的集合(例如:0,1) 

 显示结果如下:

cat  /proc/cpuinfo 

 在linux系统中,提供了/proc目录下文件,显示系统的软硬件信息。如果想了解系统中CPU的提供商和相关配置信息,则可以查/proc/cpuinfo。

显示结果:

processor :系统中逻辑处理核心数的编号,从0开始排序。

vendor_id :CPU制造商

cpu family :CPU产品系列代号

model   :CPU属于其系列中的哪一代的代号

model name:CPU属于的名字及其编号、标称主频

stepping  :CPU属于制作更新版本

cpu MHz  :CPU的实际使用主频

cache size :CPU二级缓存大小

physical id :单个物理CPU的标号

siblings :单个物理CPU的逻辑CPU数。siblings=cpu cores [*2]。

core id :当前物理核在其所处CPU中的编号,这个编号不一定连续。

cpu cores :该逻辑核所处CPU的物理核数。比如此处cpu cores 是4个,那么对应core id 可能是 1、3、4、5。

apicid :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续

fpu :是否具有浮点运算单元(Floating Point Unit)

fpu_exception :是否支持浮点计算异常

cpuid level :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容

wp :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)

flags :当前CPU支持的功能

bogomips:在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second

clflush size :每次刷新缓存的大小单位

cache_alignment :缓存地址对齐单位

address sizes :可访问地址空间位数

power management :对能源管理的支持

free

-s  指定间隔秒数

root@aliyun-sz:~# free -m  以MB为单位显示内存使用情况
              total        used        free      shared  buff/cache   available
Mem:           3936         656        1535           2        1743        2994
Swap:             0           0           0
[root@fengdeyong ~]# free -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值
              total        used        free      shared  buff/cache   available
Mem:           3.7G        368M        2.8G         11M        571M        3.1G
Swap:          2.0G          0B        2.0G

Mem 是物理内存: 内存条的内存大小  memory
Swap: 是交换分区的内存大小   : 交换分区是从磁盘里划分出来的一块空间临时做内存使用的,当物理内存不足的时候,将不活跃的进程交换到swap分区里
           尽量不使用交换分区,因为速度慢

total 总的内存大小
used 应用程序已经使用的内存
free 表示空闲的
shared 共享内存消耗的空间
buff/cache  缓存:使用的内存

buffer   :  内存--》data--》磁盘   正在运行的进程将内存里的数据写到磁盘的时候,先写到buffer里,等buffer满了再写到磁盘,减少IO的次数,提升性能。
cache    :  磁盘--》data--》内存  将经常需要的数据先读取到cache里,这样可以提升速度

total=used+free+shared+buff/cache

buffer  :  在内存里的临时存放数据的地方    data  从内存到磁盘   --》写操作
cache : 在内存里的临时存放数据的地方     data  从磁盘到内存  --》读操作
available : 能够给下一个进程提供的可用空间 free+buff/cache里的可用空间

swap 称呼为交换分区:从磁盘里拿出一块空间来充当内存使用   以前有个潜规则: swap分区建议设置为物理内存的2倍
virtual memory 虚拟内存=物理内存+swap分区
available :下一个进程可以使用的内存空间
available =  free   + buff/cache里的未使用完的空间

[root@fengdeyong ~]# cat /proc/sys/vm/swappiness  当物理内存只剩30%的时候,开始使用交换分区
30
[root@fengdeyong ~]# 

[root@fengdeyong ~]# cat /proc/sys/vm/swappiness 
30
[root@fengdeyong ~]# echo 0 >/proc/sys/vm/swappiness  当物理内存只剩0%的时候,开始使用交换分区 
[root@fengdeyong ~]# cat /proc/sys/vm/swappiness 
0

nohup、 hup

[root@fengdeyong ~]# nohup ./lu2  &  把进程放到后台去运行
[1] 8042

信号:  是进程和进程之间通信的方式

hup信号的作用: 告诉内核去杀死session相关的子进程

Dashboard  仪表盘:可以看到各种各样的监控指标的数据(cpu,内存,磁盘容量,磁盘IO,网络流量等) 

pstree

-p 显示进程的 PID

echo $$ 返回登录shell的PID

ethtool

用于查询及设置网卡参数的命令

查看宽带大小

[root@222 ~]# ethtool eno1
Settings for eno1:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: 100Mb/s   这里
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 1
	Transceiver: internal
	Auto-negotiation: on
	MDI-X: off (auto)
	Supports Wake-on: pumbg
	Wake-on: g
	Current message level: 0x00000007 (7)
			       drv probe link
	Link detected: yes

Speed: 100Mb/s 带宽为白兆

ethtool ethx       //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等
ethtool –h        //显示ethtool的命令帮助(help)
ethtool –i ethX    //查询ethX网口的相关信息 
ethtool –d ethX    //查询ethX网口注册性信息
ethtool –r ethX    //重置ethX网口到自适应模式
ethtool –S ethX    //查询ethX网口收发包统计
ethtool –s ethX [speed 10|100|1000] [duplex half|full]  [autoneg on|off]        //设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商

[root@fengdeyong ~]# ethtool  ens33
netstat -anplut
lsof  -i:22
lsof /root
lsof -p 1

nc 

可以查看端口的使用情况

安装: yum install nc -y

1) -l   用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。

2) -p  暂未用到(老版本的nc可能需要在端口号前加-p参数)

3) -s   指定发送数据的源IP地址,适用于多网卡机

4) -u   指定nc使用UDP协议,默认为TCP

5) -v   输出交互或出错信息,新手调试时尤为有用

6)-w   超时秒数,后面跟数字

7)-z   表示zero,表示扫描时不发送任何数据

[root@fengdeyong ~]# nc -z -w 1  8.219.110.232  2233

nmap 

安装: yum install nmap -y

nmap 192.168.1.1/www.baidu.com  扫描单个网络
nmap 192.168.1.1 192.168.1.2                #将扫描同个网段内不同的ip地址。

fping

类似于ping(ping是通过ICMP(网络控制信息协议InternetControl Message Protocol)协议回复请求以检测主机是否存在)。Fping与ping不同的地方在于,fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件。

选项:

-a:只显示存活主机;

-u:只显示不存活主机;

-l:循环ping
-g:通过指定起始地址与终止地址产生目标列表

目标IP地址的输入方式:

fping IP1 IP2 IP3 ...;

fping -f filename;

fping -g IP1 IP2(IP1地址开始范围,IP2地址结束范围);

curl 

利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP、HTTPS、FTP 等协议

选项:

-o/--output FILE    FILE        # 把响应内容输出到指定文件
-O/--remote-name                # 以 URL 的文件名作为文件名称保存响应内容到当前目录
-C/--continue-at    OFFSET      # 断点续传, 从 offset 位置继续传输

telnet

用于远程登录到另一台计算机的网络协议,它可以在命令行界面下使用

1. 连接到远程主机:telnet <远程主机IP地址> [端口号] 例如:telnet 192.168.0.1 80 这个命令会连接到IP地址为192.168.0.1的主机的80端口,也就是连接到Web服务器。

2. 发送命令:在连接上远程主机后,可以输入命令来执行操作。 例如:GET / HTTP/1.1 这个命令会向Web服务器发送一个HTTP请求,获取网站首页的内容。

3. 退出连接:exit或Ctrl+]命令可以退出当前的telnet连接。 例如:exit 这个命令会退出当前的telnet连接。

需要注意的是,telnet命令在现代网络中已经不太安全,因为它的数据传输是明文的,容易被黑客截获。因此,建议使用更加安全的SSH协议来进行远程登录。

df -Th

 查看磁盘容量

 可看到挂载点

文件系统       类型      容量  已用  可用 已用% 挂载点
devtmpfs       devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs          tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs          tmpfs     1.9G   12M  1.9G    1% /run
tmpfs          tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda2      xfs       193G   15G  178G    8% /
/dev/sda3      ext4      4.7G   20M  4.5G    1% /sc
/dev/sda1      xfs       997M  142M  855M   15% /boot
tmpfs          tmpfs     378M     0  378M    0% /run/user/0

网络故障排查: tcpdump、iptables、ping、nc、nmap、netstat、curl等 

ulimit

用ulimit -a 来显示当前的各种用户进程限制

ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024

sysctl

用于运行时配置内核参数

常用参数的意义:

-w 临时改变某个指定参数的值,如 sysctl -w net.ipv4.ip_forward=1

-a 显示所有的系统参数

-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能: 1) #echo 1 > /proc/sys/net/ipv4/ip_forward

2) #sysctl -w net.ipv4.ip_forward=1

以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了


cpu:    
    top
    htop
    lscpu
    cat  /proc/cpuinfo
内存
    top
    free -m -h
    swapness 30 0
    page in  page out
    sync
    cat /proc/meminfo
磁盘
    df  -Th
    iostat -x  2 10
    sar   -->tps  IOPS
网络:
    netstat
    lsof
    ss
    nc
    nmap
    ping
    fping
    dstat
    glances
    nethogs
    tcpdump
    iptables
进程:
    ps aux
    ps -ef

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值