zoukankan      html  css  js  c++  java
  • 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=/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 /文件名

    swap分区

      Swap分区,即交换区,系统在物理内存不够时,与Swap进行交换。 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通常情况下,Swap空间应大于或等于物理内存的大小,通常Swap空间的大小应是物理内存的2-2.5倍。

    swapon -s  查看当前激活的swap分区

    [root@bogon ~]# swapon -s
    文件名                类型        大小    已用    权限
    /dev/dm-1                                  partition    2097148    0    -1

    free -h 以可读性较高的方式查看系统中已用和未用的空间总和

    [root@bogon ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           976M        462M         72M        8.3M        442M        326M
    Swap:          2.0G          0B        2.0G

    swapoff /dev/dm-1 把swap分区卸载

    swapon /dev/dm-1 再激活swap分区

    mkswap /dev/sdb   制作swap分区 

  • 相关阅读:
    IP地址分类
    Python 加密 shellcode 免杀
    java翻译到mono C#实现系列(2) mono实现GridView 横向滚动
    Hello Jexus(转并修改)
    @using (Html.BeginForm())和@{Html.BeginForm();}@{Html.EndForm();}对比
    FindLine把多行查找改为多行替换
    java翻译到mono C#实现系列(1) 重写返回键按下的事件
    mono 的System.Data.SqlClient小记录
    架构文件夹说明
    Xamarin Mono For Android 4.6.07004看不到新建android
  • 原文地址:https://www.cnblogs.com/zhang-can/p/6909800.html
Copyright © 2011-2022 走看看