460 likes | 562 Vues
系統資源控制與管理. 監視系統資源 檢視行程資訊 終止行程 排程管理. 管理執行中的行程. 在系統中每位使用者都能執行多個程式,每個程式又可能分成數個行程執行。某些行程會佔用大量的系統資源,造成系統負載過重。 做為管理者,必須掌握系統中最消耗 CPU 資源的行程,以維持系統之整體效能,因隨時監看系統的狀態也是管理者的一項重要工作。. 監視系統資源的使用狀況 top 指令. 監視系統資源的使用狀況. 執行 top 指令,會周期性地更新內容,顯示最新的系統狀況 預設是以 CPU 的負載狀況排序。 按 [M] 鍵改成以記憶體的使用率。
E N D
系統資源控制與管理 監視系統資源 檢視行程資訊 終止行程 排程管理
管理執行中的行程 • 在系統中每位使用者都能執行多個程式,每個程式又可能分成數個行程執行。某些行程會佔用大量的系統資源,造成系統負載過重。 • 做為管理者,必須掌握系統中最消耗 CPU 資源的行程,以維持系統之整體效能,因隨時監看系統的狀態也是管理者的一項重要工作。
監視系統資源的使用狀況 • 執行 top指令,會周期性地更新內容,顯示最新的系統狀況 • 預設是以 CPU 的負載狀況排序。 • 按 [M] 鍵改成以記憶體的使用率。 • 按 [T] 鍵以執行的時間排序。 • 按 [P] 鍵可改回預設值。
行程類型 子行程(Child Process): 由其他行程所產生出來的行程 父行程(Parent Process): 為一個行程的名稱,可產生一個或多個 子行程。 殭屍行程(Zombie): 行程的資源無法釋放的狀態
殭屍行程 • 所謂的殭屍,是指『父母不知道的死孩子』。 • 因程式可能分為數個行程執行,當某個行程又產生另一個行程時,原先的行程就稱為父行程(parent),從父行程中產生的新行程,稱之為子行程(child)。 • 倘若子行程已經當掉 (形同死亡),而其父行程不知子行程早已死去,無法將子行程佔用的系統資源回收,此時這個子行程就變成殭屍。
監視特定使用者 • 執行 top指令,會監視系統中全部的行程,假如只想監控某位特定的使用者,只需按下 [u] 鍵,然後指定使用者帳號名稱即可:
結束執行中的行程 • 假設發覺某個行程佔用太多系統資源,或使用者執行規定以外的程式,則可從 top 內直接將其刪除:
觀察其他使用者的行程 • 查看其他使用者正在執行的行程
查看背景執行的行程 • 使用 ps指令,所觀察到的行程列表,都是在前景執行的行程,並非所有行程都在前景執行,隱藏在背景裡執行之行程也是不少的 • 觀察系統和每位使用者執行中的全部行程,加上 "aux" 參數
搭配其他指令查詢特定行程 • 上面的效果類似 "uU" 參數:
刪除執行中的行程 • kill指令預設是使用參數 “-15”,此參數會中斷正在執行的行程,所以一般只需使用 kill指令加上欲刪除行程的 PID,便可刪除該行程。 • 若遇到無法順利刪除的行程,就需要再加上其他的參數:
如何將目前登入的使用者踢出系統? • 當發現有某使用者佔用了太多的系統資源,或者有異常行為,要將其踢出系統。 • 先執行 who指令,找出使用者登入的終端機代號,接著再以 ps指令,找出該終端機正在執行的行程中,行程識別碼 PID 編號最小者,執行 kill - 9指令,將此行程強制刪除,即可將使用者踢出系統。
行程優先權控制 • 調整優先權會影響程式執行的速度 • nice 程式優先值設定 • nice –n 5 程式名稱 • renice 變更優先值 • renice 5 (-20~+19) PID • 一般帳號只能將程式速度調慢
nice值比較 • # seq 500000 > /tmp/1.txt# time seq 500000 > /tmp/1.txt • # time nice –n -20 seq 500000 > /tmp/1.txt (最快) • # time nice –n 19 seq 500000 > /tmp/1.txt (最慢)
排程工作 • 利用排程解決重複性或是需要指定時間的工作。
排程的 crond 常駐指令 • crond每分鐘會定期檢查是否有要執行的工作,如果有要執行的工作,便會自動執行該工作。而 Linux 所排程的工作主要分成以下 2 類: • 系統執行的工作 • 個人執行的工作
排程設定檔的寫法 • 排程設定檔的格式如下,除了 Command 是每次都必須指定的欄位以外,其他欄位皆可視需求自行決定是否指定,不指定的欄位,填上* 即可。
排程設定檔的寫法 • 指定每小時的第 1 分鐘執行 program -a -b -c指令: • 指定每天的 4 點 20 分執行 program指令:
排程設定檔的寫法 • 指定每月 9 日的 3 點 50 分執行 program指令: • 指定每年的 9 月 8 日 0 點 1 分執行 program指令:
排程設定檔的寫法 • 指定每星期日 4 點 9 分執行 program 指令: • 如果同時指定多個不連續的時間,則可在時間跟時間之間用 “,” 區隔開來。 • 以下指定每月 1 日及 15 日的 2 點 20 分執行 program指令:
排程設定檔的寫法 • 如果要指定連續的時間,則可用 “-” 連接兩段時間。 • 以下指定每天1 點至 4 點的第 25 分鐘執行 program指令:
排程設定檔的寫法 • 若要指定週期性的時間,則可用 “/” 加上 “時間間隔” 指定。例如以下範例指定每隔 10 分鐘執行一次 program指令: • 指定每月隔 10 天的 5 點 35 分執行一次 program指令:
接下頁 排程的系統工作 • /etc/crontab 檔是 Linux 系統工作的排程設定檔
排程的系統工作 • 在上述的系統工作排程設定檔中,crond 排程指令會每小時、每天、每週及每月執行一次 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 及 /etc/cron.monthly 目錄中的所有設定檔。
排程的個人工作 • 除了上述排程的系統工作以外,所有使用者可利用 crontab指令,自行設定要定期執行的工作。 • 執行 crontab -e指令,編輯自己的排程設定檔,並在此檔加入要定期執行的工作。
使用者新增排程工作 • 例如指定每天的 14 點 55 分執行 tar czvf backup/backup.tar work/*指令,將其家目錄中 work 子目錄下的所有檔案,打包並壓縮後,備份到家目錄 backup 子目錄下 • 而crond指令在 14 點 55 分執行了 使用者指定的指令之後,便會將輸出結果或錯誤訊息,以 E-mail 寄送給該使用者。
使用者檢視目前排程的工作 • 要知道目前自己排程的工作,可執行 crontab -l指令查詢:
使用者刪除排程的工作 • 如果不想再定期執行排程中的工作,則可執行 crontab -r指令刪除所有排程的工作:
管理者可管理所有使用者排程的工作 • root 系統管理者除了可執行crontab指令,設定自己的程排工作外,亦可管理一般使用者的排程工作 • 另外管理者也可執行 crontab -l -u tony指令列出 tony 使用者目前排程的工作;執行 crontab -r -u tony指令刪除 tony 使用者所有排程的工作。
個人排程設定檔擺放的位置 • 每個使用者排程工作的設定檔會被儲存在 /var/spool/cron 目錄下,以帳號名稱為檔名。 • 這些設定檔只允許 root 讀寫,一般使用者並沒有權限讀取此排程設定檔。
排程程式的輸出結果 • crond指令預設會將執行的結果及錯誤訊息,以 E-mail 的方式寄給要求執行的使用者。您如果不想收到這些郵件,可加入以下所述的內容,將執行結果導向到一個記錄檔
排程程式的輸出結果 • 下例會將執行結果及錯誤訊息,全部導向指定的記錄檔: • 下例將不會儲存所有執行結果及錯誤訊息:
設定執行一次的排程工作 • 指定關機日期
查詢及刪除排程工作 • 設定好的排程如果臨時變更,或想查詢或刪除排程呢? • 查詢 at 指令所設定排程的 atq 指令:
查詢及刪除排程工作 • 刪除排程工作,用atrm指令: • atq及atrm 指令,也可分別用 at -l及 at -d來代替。