1. 程式人生 > >Linux基礎(四)

Linux基礎(四)

har jid work 區號 linu watch worker eof -1

一、系統監控

1.用top命令實時監測CPU、內存、硬盤狀態

效果類似Windows的任務管理器,默認每5秒刷新一下屏幕上的顯示結果。

[[email protected] /]# 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命令:檢測系統已用和未用的內存空間總和

[[email protected] /]# 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會以人類可讀的方式顯示

[[email protected] /]# 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行

[[email protected] /]# 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’字符的內容

[[email protected] /]# 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程序,然後用命令殺掉它,

[[email protected] /]# 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
[[email protected] /]# kill -9 8384

技術分享

我們還可以以樹狀圖的方式查看進程,用命令 pstree PID

技術分享
[email protected] /]# 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:保存

代碼如下

[[email protected] ~]# fdisk -l /dev/sdb

磁盤 /dev/sdb:16.1 GB, 16106127360 字節,31457280 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節

[[email protected] ~]# 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/

代碼如下

[[email protected] ~]# 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

[[email protected] /]# mkdir /part1
[[email protected] /]# mount /dev/sdb1 /part1
[[email protected] /]# 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基礎(四)