首页 > 代码库 > Linux基础(四)

Linux基础(四)

一、系统监控

1.用top命令实时监测CPU、内存、硬盘状态

效果类似Windows的任务管理器,默认每5秒刷新一下屏幕上的显示结果。

[root@localhost /]# top

top - 17:39:47 up 45 min,  2 users,  load average: 0.07, 0.05, 0.05
Tasks: 175 total,   3 running, 172 sleeping,   0 stopped,   0 zombie
%Cpu(s): 14.0 us,  2.7 sy,  0.0 ni, 82.9 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  1875716 total,   883260 free,   511916 used,   480540 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1160536 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND     
 2930 root      20   0 1491516 179012  49708 S  9.6  9.5   0:38.08 gnome-shell 
 1308 root      20   0  221852  29924  10696 R  5.0  1.6   0:12.65 Xorg        
 3442 root      20   0  573828  24200  15116 R  2.0  1.3   0:06.38 gnome-termi+
  670 root      20   0    4368    592    496 S  0.3  0.0   0:00.94 rngd        
  710 root      20   0  302644   6180   4804 S  0.3  0.3   0:04.39 vmtoolsd    
 2888 root      20   0  201268   3408   2756 S  0.3  0.2   0:00.29 at-spi2-reg+
 2900 root      20   0 1159540  23944  15760 S  0.3  1.3   0:00.95 gnome-setti+
 3044 root      20   0  377916  18660  14776 S  0.3  1.0   0:04.27 vmtoolsd    
 4276 root      20   0  157708   2256   1556 R  0.3  0.1   0:00.26 top         
    1 root      20   0  128092   6692   3944 S  0.0  0.4   0:02.37 systemd     
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd    
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.16 ksoftirqd/0 
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.18 kworker/u12+
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0 
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh      
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.77 rcu_sched   
   10 root      rt   0       0      0      0 S  0.0  0.0   0:00.03 watchdog/0  

1)第一行是任务队列信息

分别是当前时间,系统运行时间,当前登录用户数,系统负载(三个数值分别是1min.5min.15min内的平均值)

2)第二、三行为进程和CPU的信息

分别是进程总数,正在运行的进程数,睡眠的进程数,停止的进程数,僵尸进程数,用户控件占CPU的百分比,内核空间占CPU的百分比,用户进程空间内改变优先级的进程占CPU的百分比,空闲CPU的百分比,等待输入输出的CPU时间的百分比,硬件中断占用CPU时间的百分比,软件中断占用CPU时间的百分比

僵尸进程:是指如果一个进程结束后,如果他的父进程没有等待或调用他,那么他就变成了僵尸进程,仍然占用CPU

3)第四、五行为内存信息

4)下面是进程信息

  pid:进程ID

  user:进程所有者的用户名

  pr:优先级

  ni:nice 值,负值表示高优先级,正值表示低优先级

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

  res:进程使用的、未被换出的物理内存大小,单位KB,RES=CODE+DATA

  shr:共享内存大小,单位KB

  s:进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)

  command:命令名/命令行

  cpu利用率与load average

  cpu是用来干活的,按照这个层面去理解,每个码农都是一个cpu

 

cpu利用率:上一天班的时间是8个小时,而码农敲代码的时间为2个小时,2/8=0.25  ,25%就是码农在一天的时间内的利用率(正常情况,cpu利用率<70%)

cpu负载:公司在一分钟内为某个码农安排了3个任务,而1分钟内该码农能做6个任务,那么该码农一分钟内的负载为0.5

如果公司在5分钟内为某个码农安排了100个任务,而5分钟内该码农只能做50个任务,那么该码农5分钟内的负载为2.0,即超负荷运转

cpu负载<=1:能正常应付

cpu负载>1:超负荷运转

如果有4核,相当于将100个任务交给4个码农去干,如果每个码农的负载都是100%,那么整体的cpu负载达到4.0则是很正常的现象

多核cpu, load average 应该 <= cpu核数 * 0.7


  存在1分钟,5分钟,15分钟三种cpu负载的原因是为了以一个更准确的方式来描述CPU的使用状态,如果仅是1分钟的CPU负载很高,5分钟或者15分钟后就降下来,那么就不用担心,如果CPU的使用率一直很高,那就需要提高硬件配置了。

在两种情况下会导致一个进程在逻辑上不能运行

1) 进程挂起是自身原因,遇到I/O阻塞,便要让出CPU让其他进程去执行,这样保证CPU一直在工作

2) 与进程无关,是操作系统层面,可能会因为一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。

 

2.free命令:检测系统已用和未用的内存空间总和

[root@localhost /]# free
              total        used        free      shared  buff/cache   available
Mem:        1875716      505684      890048       10752      479984     1166956
Swap:       2097148           0     2097148

使用free -w可以把buffer/cache拆开显示

使用free -h会以人类可读的方式显示

[root@localhost /]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        517M        843M         10M        470M        1.1G
Swap:          2.0G          0B        2.0G

buffer和cache的解释:

A buffer is something that has yet to be "written" to disk. 

A cache is something that has been "read" from the disk and stored for later use.

也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

像Windows这种成熟的系统,会多分配一些空间给cache以提高I/O的性能

available 表示cache能释放的内存+可作为suffer/cache的内存,直接就代表内存的剩余量

命令 while :; do free ; sleep 1 ; clear ;done可以实现动态监测

命令 echo 3 > /proc/sys/vm/drop_caches可以释放cache

3.进程的监测

用ps aux命令查看进程

用ps aux |head -n查看前n行

[root@localhost /]# ps aux |head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 128092  6692 ?        Ss   16:54   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2  0.0  0.0      0     0 ?        S    16:54   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    16:54   0:00 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S    16:54   0:00 [migration/0]

用ps aux | grep‘top‘可以过滤包含‘top’字符的内容

[root@localhost /]# ps aux |grep ‘top‘
root      3035  0.0  1.5 1020224 29872 ?       Sl   16:55   0:01 nautilus --no-default-window --force-desktop
root      7548  0.0  0.0 112664   968 pts/1    R+   18:54   0:00 grep --color=auto top

杀死一个进程用kill -9 PID命令

我们演示打开一个Firefox程序,然后用命令杀掉它,

[root@localhost /]# ps aux | grep ‘firefox‘
root      8384  7.6 10.1 2098636 190952 pts/1  Sl+  18:59   0:05 /usr/lib64/firefox/firefox
root      8762  0.0  0.0 112664   972 pts/2    R+   19:00   0:00 grep --color=auto firefox
[root@localhost /]# kill -9 8384

技术分享

我们还可以以树状图的方式查看进程,用命令 pstree PID

技术分享
t@localhost /]# pstree 2
kthreadd─┬─ata_sff
         ├─3*[bioset]
         ├─crypto
         ├─deferwq
         ├─fsnotify_mark
         ├─2*[hci0]
         ├─ipv6_addrconf
         ├─kauditd
         ├─kblockd
         ├─kdevtmpfs
         ├─2*[kdmflush]
         ├─khugepaged
         ├─khungtaskd
         ├─kintegrityd
         ├─kmpath_rdacd
         ├─kpsmoused
         ├─krfcommd
         ├─ksmd
         ├─ksoftirqd/0
         ├─kswapd0
         ├─kthrotld
         ├─kworker/0:0
         ├─kworker/0:0H
         ├─kworker/0:1
         ├─kworker/0:1H
         ├─kworker/0:2
         ├─kworker/u128:1
         ├─kworker/u128:2
         ├─kworker/u129:0
         ├─kworker/u129:1
         ├─md
         ├─migration/0
         ├─mpt/0
         ├─mpt_poll_0
         ├─netns
         ├─nfit
         ├─rcu_bh
         ├─rcu_sched
         ├─rpciod
         ├─scsi_eh_0
         ├─scsi_eh_1
         ├─scsi_eh_2
         ├─scsi_tmf_0
         ├─scsi_tmf_1
         ├─scsi_tmf_2
         ├─ttm_swap
         ├─watchdog/0
         ├─writeback
         ├─xfs-buf/dm-0
         ├─xfs-buf/sda1
         ├─xfs-buf/sdb1
         ├─xfs-cil/dm-0
         ├─xfs-cil/sda1
         ├─xfs-cil/sdb1
         ├─xfs-conv/dm-0
         ├─xfs-conv/sda1
         ├─xfs-conv/sdb1
         ├─xfs-data/dm-0
         ├─xfs-data/sda1
         ├─xfs-data/sdb1
         ├─xfs-eofblocks/d
         ├─2*[xfs-eofblocks/s]
         ├─xfs-log/dm-0
         ├─xfs-log/sda1
         ├─xfs-log/sdb1
         ├─xfs-reclaim/dm-
         ├─xfs-reclaim/sda
         ├─xfs-reclaim/sdb
         ├─xfs_mru_cache
         ├─xfsaild/dm-0
         ├─xfsaild/sda1
         ├─xfsaild/sdb1
         └─xfsalloc
View Code

注意,centos7默认没有pstree,需要yum -y install psmisc命令来安装

二、硬盘格式化

当我们在虚拟机中新加入一块硬盘后,我们需要分区,然后格式化写入文件系统之后才能被我们使用

我们演示一下加入一块硬盘后的操作,在配置信息中加入一块15G的硬盘,重启系统

在Linux系统中,一切皆文件,硬盘对应的文件在/dev目录下,默认第一块硬盘为sda,第二块为sdb,.....

用fdisk -l /dev/sdb 查看第二块硬盘的信息

然后开始分区,用命令 fdisk /dev/sdb

  n:新建分区

  p:查看分区

  w:保存

代码如下

[root@localhost ~]# fdisk -l /dev/sdb

磁盘 /dev/sdb:16.1 GB, 16106127360 字节,31457280 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xc23c658d 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-31457279,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-31457279,默认为 31457279):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (10487808-31457279,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-31457279,默认为 31457279):
将使用默认值 31457279
分区 2 已设置为 Extended 类型,大小设为 10 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (10489856-31457279,默认为 10489856):
将使用默认值 10489856
Last 扇区, +扇区 or +size{K,M,G} (10489856-31457279,默认为 31457279):+5G
分区 5 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:16.1 GB, 16106127360 字节,31457280 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc23c658d

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    31457279    10484736    5  Extended
/dev/sdb5        10489856    20975615     5242880   83  Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

然后我们格式化,把文件系统写入第一个分区即sdb1,命令为 mkfs.xfs /dev/sdb1/

代码如下

[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=http://www.mamicode.com/dev/sdb1              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

挂载:

在根目录下新建一个part1文件夹,把/dev/sdb1 挂载到 /part1下,用命令mount  /dev/sdb1 /part1

[root@localhost /]# mkdir /part1
[root@localhost /]# mount /dev/sdb1 /part1
[root@localhost /]# df
文件系统               1K-块    已用     可用 已用% 挂载点
/dev/mapper/cl-root 17811456 4613280 13198176   26% /
devtmpfs              921036       0   921036    0% /dev
tmpfs                 937856     144   937712    1% /dev/shm
tmpfs                 937856    9156   928700    1% /run
tmpfs                 937856       0   937856    0% /sys/fs/cgroup
/dev/sda1            1038336  178584   859752   18% /boot
tmpfs                 187572       8   187564    1% /run/user/0
/dev/sr0             4236604 4236604        0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1            5232640   32944  5199696    1% /part1

用df命令查看硬盘使用情况,可以发现, /dev/sdb1 已经被挂载到 /part1中了

在centos 7 中采用xfs文件系统,与etc4相比处理大文件的性能有很大提升

需要理解的是,文件和文件夹都是文件系统提供的逻辑单位,真正可以保存数据的只有硬盘。

卸载:

umount /文件名

 

 

Linux基础(四)