Linux基礎(四)
一、系統監控
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 Xorg3442 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 vmtoolsd4276 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 └─xfsallocView 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基礎(四)