自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux進(jìn)程資源用量監(jiān)控和按用戶設(shè)置進(jìn)程限制

系統(tǒng) Linux 系統(tǒng)運(yùn)維
每個(gè) Linux 系統(tǒng)管理員都應(yīng)該知道如何驗(yàn)證硬件、資源和主要進(jìn)程的完整性和可用性。另外,基于每個(gè)用戶設(shè)置資源限制也是其中一項(xiàng)必備技能。在這篇文章中,我們會(huì)介紹一些能夠確保系統(tǒng)硬件和軟件正常工作的方法,這些方法能夠避免潛在的會(huì)導(dǎo)致生產(chǎn)環(huán)境下線或錢財(cái)損失的問(wèn)題發(fā)生。

 

由于 2016 年 2 月 2 號(hào)開(kāi)始啟用了新的 LFCS 考試要求,我們?cè)谝呀?jīng)發(fā)表的 LFCS 系列 基礎(chǔ)上增加了一些必要的主題。為了準(zhǔn)備考試,同時(shí)也建議你看看 LFCE 系列 文章。

每個(gè) Linux 系統(tǒng)管理員都應(yīng)該知道如何驗(yàn)證硬件、資源和主要進(jìn)程的完整性和可用性。另外,基于每個(gè)用戶設(shè)置資源限制也是其中一項(xiàng)必備技能。

在這篇文章中,我們會(huì)介紹一些能夠確保系統(tǒng)硬件和軟件正常工作的方法,這些方法能夠避免潛在的會(huì)導(dǎo)致生產(chǎn)環(huán)境下線或錢財(cái)損失的問(wèn)題發(fā)生。

報(bào)告 Linux 進(jìn)程統(tǒng)計(jì)信息

你可以使用 mpstat 單獨(dú)查看每個(gè)處理器或者系統(tǒng)整體的活動(dòng),可以是每次一個(gè)快照或者動(dòng)態(tài)更新。

為了使用這個(gè)工具,你首先需要安裝 sysstat:

  1. # yum update && yum install sysstat              [基于 CentOS 的系統(tǒng)] 
  2. # aptitutde update && aptitude install sysstat   [基于 Ubuntu 的系統(tǒng)] 
  3. # zypper update && zypper install sysstat        [基于 openSUSE 的系統(tǒng)] 

你可以在 在 Linux 中學(xué)習(xí) Sysstat 和其中的工具 mpstat、pidstat、iostat 和 sar 了解更多和 sysstat 和其中的工具相關(guān)的信息。

安裝完 mpstat 之后,就可以使用它生成處理器統(tǒng)計(jì)信息的報(bào)告。

你可以使用下面的命令每隔 2 秒顯示所有 CPU(用 -P ALL 表示)的 CPU 利用率(-u),共顯示 3 次。

  1. # mpstat -P ALL -u 2 3 

示例輸出:

  1. Linux 3.19.0-32-generic (tecmint.com)   Wednesday 30 March 2016     _x86_64_    (4 CPU) 
  2. 11:41:07  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 
  3. 11:41:09  IST  all    5.85    0.00    1.12    0.12    0.00    0.00    0.00    0.00    0.00   92.91 
  4. 11:41:09  IST    0    4.48    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.53 
  5. 11:41:09  IST    1    2.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   97.00 
  6. 11:41:09  IST    2    6.44    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   92.57 
  7. 11:41:09  IST    3   10.45    0.00    1.99    0.00    0.00    0.00    0.00    0.00    0.00   87.56 
  8. 11:41:09  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 
  9. 11:41:11  IST  all   11.60    0.12    1.12    0.50    0.00    0.00    0.00    0.00    0.00   86.66 
  10. 11:41:11  IST    0   10.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   88.50 
  11. 11:41:11  IST    1   14.36    0.00    1.49    2.48    0.00    0.00    0.00    0.00    0.00   81.68 
  12. 11:41:11  IST    2    2.00    0.50    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.50 
  13. 11:41:11  IST    3   19.40    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   79.60 
  14. 11:41:11  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 
  15. 11:41:13  IST  all    5.69    0.00    1.24    0.00    0.00    0.00    0.00    0.00    0.00   93.07 
  16. 11:41:13  IST    0    2.97    0.00    1.49    0.00    0.00    0.00    0.00    0.00    0.00   95.54 
  17. 11:41:13  IST    1   10.78    0.00    1.47    0.00    0.00    0.00    0.00    0.00    0.00   87.75 
  18. 11:41:13  IST    2    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00 
  19. 11:41:13  IST    3    6.93    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   92.57 
  20. Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 
  21. Average:     all    7.71    0.04    1.16    0.21    0.00    0.00    0.00    0.00    0.00   90.89 
  22. Average:       0    5.97    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   92.87 
  23. Average:       1    9.24    0.00    1.16    0.83    0.00    0.00    0.00    0.00    0.00   88.78 
  24. Average:       2    3.49    0.17    1.00    0.00    0.00    0.00    0.00    0.00    0.00   95.35 
  25. Average:       3   12.25    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   86.59 

要查看指定的 CPU(在下面的例子中是 CPU 0),可以使用:

  1. # mpstat -P 0 -u 2 3 

示例輸出:

  1. Linux 3.19.0-32-generic (tecmint.com)   Wednesday 30 March 2016     _x86_64_    (4 CPU) 
  2. 11:42:08  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle 
  3. 11:42:10  IST    0    3.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   96.50 
  4. 11:42:12  IST    0    4.08    0.00    0.00    2.55    0.00    0.00    0.00    0.00    0.00   93.37 
  5. 11:42:14  IST    0    9.74    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   89.74 
  6. Average:       0    5.58    0.00    0.34    0.85    0.00    0.00    0.00    0.00    0.00   93.23 

上面命令的輸出包括這些列:

  • CPU: 整數(shù)表示的處理器號(hào)或者 all 表示所有處理器的平均值。
  • %usr: 運(yùn)行在用戶級(jí)別的應(yīng)用的 CPU 利用率百分?jǐn)?shù)。
  • %nice: 和 %usr 相同,但有 nice 優(yōu)先級(jí)。
  • %sys: 執(zhí)行內(nèi)核應(yīng)用的 CPU 利用率百分比。這不包括用于處理中斷或者硬件請(qǐng)求的時(shí)間。
  • %iowait: 指定(或所有)CPU 的空閑時(shí)間百分比,這表示當(dāng)前 CPU 處于 I/O 操作密集的狀態(tài)。更詳細(xì)的解釋(附帶示例)可以查看這里。
  • %irq: 用于處理硬件中斷的時(shí)間所占百分比。
  • %soft: 和 %irq 相同,但是是軟中斷。
  • %steal: 虛擬機(jī)非自主等待(時(shí)間片竊取)所占時(shí)間的百分比,即當(dāng)虛擬機(jī)在競(jìng)爭(zhēng) CPU 時(shí)所從虛擬機(jī)管理程序那里“贏得”的時(shí)間。應(yīng)該保持這個(gè)值盡可能小。如果這個(gè)值很大,意味著虛擬機(jī)正在或者將要停止運(yùn)轉(zhuǎn)。
  • %guest: 運(yùn)行虛擬處理器所用的時(shí)間百分比。
  • %idle: CPU 沒(méi)有運(yùn)行任何任務(wù)所占時(shí)間的百分比。如果你觀察到這個(gè)值很小,意味著系統(tǒng)負(fù)載很重。在這種情況下,你需要查看詳細(xì)的進(jìn)程列表、以及下面將要討論的內(nèi)容來(lái)確定這是什么原因?qū)е碌摹?/li>

運(yùn)行下面的命令使處理器處于極高負(fù)載,然后在另一個(gè)終端執(zhí)行 mpstat 命令:

  1. # dd if=/dev/zero of=test.iso bs=1G count=1 
  2. # mpstat -u -P 0 2 3 
  3. # ping -f localhost # Interrupt with Ctrl + C after mpstat below completes 
  4. # mpstat -u -P 0 2 3 

最后,和 “正常” 情況下 mpstat 的輸出作比較:

 Linux 處理器相關(guān)統(tǒng)計(jì)信息報(bào)告

正如你在上面圖示中看到的,在前面兩個(gè)例子中,根據(jù) %idle 的值可以判斷 CPU 0 負(fù)載很高。

在下一部分,我們會(huì)討論如何識(shí)別資源饑餓型進(jìn)程,如何獲取更多和它們相關(guān)的信息,以及如何采取恰當(dāng)?shù)拇胧?/p>

Linux 進(jìn)程報(bào)告

我們可以使用有名的 ps 命令,用 -eo 選項(xiàng)(根據(jù)用戶定義格式選中所有進(jìn)程) 和 --sort 選項(xiàng)(指定自定義排序順序)按照 CPU 使用率排序列出進(jìn)程,例如:

  1. # ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu 

上面的命令只會(huì)顯示 PID、PPID、和進(jìn)程相關(guān)的命令、 CPU 使用率以及 RAM 使用率,并按照 CPU 使用率降序排序。創(chuàng)建 .iso 文件的時(shí)候運(yùn)行上面的命令,下面是輸出的前面幾行:

 根據(jù) CPU 使用率查找進(jìn)程

一旦我們找到了感興趣的進(jìn)程(例如 PID=2822 的進(jìn)程),我們就可以進(jìn)入 /proc/PID(本例中是 /proc/2822) 列出目錄內(nèi)容。

這個(gè)目錄就是進(jìn)程運(yùn)行的時(shí)候保存多個(gè)關(guān)于該進(jìn)程詳細(xì)信息的文件和子目錄的目錄。

例如:

  • /proc/2822/io 包括該進(jìn)程的 IO 統(tǒng)計(jì)信息(IO 操作時(shí)的讀寫(xiě)字符數(shù))。
  • /proc/2822/attr/current 顯示了進(jìn)程當(dāng)前的 SELinux 安全屬性。
  • /proc/2822/cgroup 如果啟用了 CONFIGCGROUPS 內(nèi)核設(shè)置選項(xiàng),這會(huì)顯示該進(jìn)程所屬的控制組(簡(jiǎn)稱 cgroups),你可以使用下面命令驗(yàn)證是否啟用了 CONFIGCGROUPS:
  1. # cat /boot/config-$(uname -r) | grep -i cgroups 

如果啟用了該選項(xiàng),你應(yīng)該看到:

  1. CONFIG_CGROUPS=y 

根據(jù) 紅帽企業(yè)版 Linux 7 資源管理指南 第一到四章的內(nèi)容、openSUSE 系統(tǒng)分析和調(diào)優(yōu)指南 第九章、Ubuntu 14.04 服務(wù)器文檔 Control Groups 章節(jié),你可以使用 cgroups 管理每個(gè)進(jìn)程允許使用的資源數(shù)目。

/proc/2822/fd 這個(gè)目錄包含每個(gè)打開(kāi)的描述進(jìn)程的文件的符號(hào)鏈接。下面的截圖顯示了 tty1(第一個(gè)終端) 中創(chuàng)建 .iso 鏡像進(jìn)程的相關(guān)信息:

 查找 Linux 進(jìn)程信息

上面的截圖顯示 stdin(文件描述符 0)、stdout(文件描述符 1)、stderr(文件描述符 2) 相應(yīng)地被映射到 /dev/zero、 /root/test.iso 和 /dev/tty1。

更多關(guān)于 /proc 信息的可以查看 Kernel.org 維護(hù)的 “/proc 文件系統(tǒng)” 和 Linux 開(kāi)發(fā)者手冊(cè)。

在 Linux 中為每個(gè)用戶設(shè)置資源限制

如果你不夠小心、讓任意用戶使用不受限制的進(jìn)程數(shù),最終你可能會(huì)遇到意外的系統(tǒng)關(guān)機(jī)或者由于系統(tǒng)進(jìn)入不可用的狀態(tài)而被鎖住。為了防止這種情況發(fā)生,你應(yīng)該為用戶可以啟動(dòng)的進(jìn)程數(shù)目設(shè)置上限。

你可以在 /etc/security/limits.conf 文件末尾添加下面一行來(lái)設(shè)置限制:

  1. *       hard    nproc   10 

第一個(gè)字段可以用來(lái)表示一個(gè)用戶、組或者所有人(*), 第二個(gè)字段強(qiáng)制限制可以使用的進(jìn)程數(shù)目(nproc) 為 10。退出并重新登錄就可以使設(shè)置生效。

然后,讓我們來(lái)看看非 root 用戶(合法用戶或非法用戶) 試圖引起 shell fork 炸彈 (參見(jiàn) WiKi) 時(shí)會(huì)發(fā)生什么。如果我們沒(méi)有設(shè)置限制, shell fork 炸彈會(huì)無(wú)限制地啟動(dòng)函數(shù)的兩個(gè)實(shí)例,然后無(wú)限循環(huán)地復(fù)制任意一個(gè)實(shí)例。最終導(dǎo)致你的系統(tǒng)卡死。

但是,如果使用了上面的限制,fort 炸彈就不會(huì)成功,但用戶仍然會(huì)被鎖在外面直到系統(tǒng)管理員殺死相關(guān)的進(jìn)程。

 運(yùn)行 Shell Fork 炸彈

提示: limits.conf 文件中可以查看其它 ulimit 可以更改的限制。

其它 Linux 進(jìn)程管理工具

除了上面討論的工具, 一個(gè)系統(tǒng)管理員還可能需要:

a) 通過(guò)使用 renice 調(diào)整執(zhí)行優(yōu)先級(jí)(系統(tǒng)資源的使用)。這意味著內(nèi)核會(huì)根據(jù)分配的優(yōu)先級(jí)(眾所周知的 “niceness”,它是一個(gè)范圍從 -20 到 19 的整數(shù))給進(jìn)程分配更多或更少的系統(tǒng)資源。

這個(gè)值越小,執(zhí)行優(yōu)先級(jí)越高。普通用戶(而非 root)只能調(diào)高他們所有的進(jìn)程的 niceness 值(意味著更低的優(yōu)先級(jí)),而 root 用戶可以調(diào)高或調(diào)低任何進(jìn)程的 niceness 值。

renice 命令的基本語(yǔ)法如下:

  1. # renice [-n] <new priority> <UID, GID, PGID, or empty> identifier 

如果 new priority 后面的參數(shù)沒(méi)有(為空),默認(rèn)就是 PID。在這種情況下,PID=identifier 的進(jìn)程的 niceness 值會(huì)被設(shè)置為 <new priority>。

b) 需要的時(shí)候中斷一個(gè)進(jìn)程的正常執(zhí)行。這也就是通常所說(shuō)的“殺死”進(jìn)程。實(shí)質(zhì)上,這意味著給進(jìn)程發(fā)送一個(gè)信號(hào)使它恰當(dāng)?shù)亟Y(jié)束運(yùn)行并以有序的方式釋放任何占用的資源。

按照下面的方式使用 kill 命令殺死進(jìn)程:

  1. # kill PID 

另外,你也可以使用 pkill 結(jié)束指定用戶(-u)、指定組(-G) 甚至有共同的父進(jìn)程 ID (-P) 的所有進(jìn)程。這些選項(xiàng)后面可以使用數(shù)字或者名稱表示的標(biāo)識(shí)符。

  1. # pkill [options] identifier 

例如:

  1. # pkill -G 1000 

會(huì)殺死組 GID=1000 的所有進(jìn)程。而

  1. # pkill -P 4993 

會(huì)殺死 PPID 是 4993 的所有進(jìn)程。

在運(yùn)行 pkill 之前,先用 pgrep 測(cè)試結(jié)果、或者使用 -l 選項(xiàng)列出進(jìn)程名稱是一個(gè)很好的辦法。它需要和 pkill 相同的參數(shù)、但是只會(huì)返回進(jìn)程的 PID(而不會(huì)有其它操作),而 pkill 會(huì)殺死進(jìn)程。

  1. # pgrep -l -u gacanepa 

用下面的圖片說(shuō)明:

 在 Linux 中查找用戶運(yùn)行的進(jìn)程

總結(jié)

在這篇文章中我們探討了一些監(jiān)控資源使用的方法,以便驗(yàn)證 Linux 系統(tǒng)中重要硬件和軟件組件的完整性和可用性。

我們也學(xué)習(xí)了如何在特殊情況下采取恰當(dāng)?shù)拇胧?通過(guò)調(diào)整給定進(jìn)程的執(zhí)行優(yōu)先級(jí)或者結(jié)束進(jìn)程)。

我們希望本篇中介紹的概念能對(duì)你有所幫助。如果你有任何疑問(wèn)或者評(píng)論,可以使用下面的聯(lián)系方式聯(lián)系我們。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2016-10-08 12:46:08

Linux監(jiān)控限制

2019-07-04 08:31:04

Linux監(jiān)控網(wǎng)絡(luò)

2010-02-25 10:28:43

Linux進(jìn)程管理

2009-11-13 09:28:35

2017-08-02 15:28:58

Linux進(jìn)程睡眠和喚醒

2010-06-13 15:17:16

Linux 查看進(jìn)程

2010-06-04 15:16:36

Linux 查看進(jìn)程

2010-11-29 14:14:29

Sybase用戶權(quán)限

2010-06-04 14:31:59

Linux 查看進(jìn)程

2011-10-24 09:49:37

管理非限制進(jìn)程SELinux

2023-03-05 16:12:41

Linux進(jìn)程線程

2018-05-18 08:43:27

Linux內(nèi)存空間

2022-05-27 11:59:22

Linux內(nèi)存CPU

2020-04-29 15:10:16

Linux命令進(jìn)程

2023-03-02 23:50:36

Linux進(jìn)程管理

2010-06-28 14:52:30

cron進(jìn)程

2010-02-04 09:26:34

Linux vmsta

2009-10-28 10:01:57

2011-09-02 11:06:28

Oracle服務(wù)器進(jìn)程為事務(wù)建立回滾段放入dirty lis

2019-01-29 10:10:09

Linux內(nèi)存進(jìn)程堆
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)