漂亮的 renice 和 ionice
我已經閱讀
nice
renice
並ionice
控制正在執行的程序的調度優先級。但是,我仍然不明白它們何時以及如何有用。例如做類似的事情:nice -n 13 pico myfile.txt
關於 pico,它不太可能引起太多關注,因此它不是您通常會使用的那種命令 nice/renice 或 ionice。但是,您的命令將執行 pico niceed to +13。這意味著分配給它的時間將大大減少。例如,從您的 pico 線路開始。通常 pico 執行如下所示:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD 501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash 501 20136 20118 4006 0 31 0 2434992 772 - S+ 85eed20 ttys000 0:00.00 pico
其中 NI 是不錯的水平。如果我用你的命令執行 pico,它看起來像這樣:
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD 501 20118 20117 4006 0 31 0 2435548 1068 - S eb577e0 ttys000 0:00.03 -bash 501 20179 20118 4006 0 18 13 2434992 904 - SN+ 85eed20 ttys000 0:00.01 pico
好的,這表明您執行的命令行是有效的,但它實際上是做什麼的?好的,假設您有一個非常繁忙但又不至於如此的系統。全天候都很忙,午夜時分一項重要的維護任務開始了。它是執行腳本以生成一些每日統計資訊的 mysql 命令行。有很多處理,所以它對 CPU 造成了沉重的打擊,使用者對此抱怨。強烈地,就像他們一樣。你能為這個做什麼?這個腳本需要多長時間並不重要,因此您可以在命令前面加上“nice -n 13”,並且下次執行它不會對使用者造成如此糟糕的影響,但需要更長的時間才能完成。MySQL 腳本的所有者不在乎,因為他只想要第二天進入時的統計資訊。大家都開心。
除了這些工具之外,您還可以對系統如何優先考慮分配給任務的 CPU(在 ionice 的情況下可能是 IO)時間進行一些控制。它們只會在系統載入時生效,在此之前,每個人的任務都被分配到他們需要的所有時間。
renice 命令以非常相似的方式工作,但它允許您更改已經執行的程序的優先級。因此,在上述軼事中,您可以使用 renice 更改 mysql 命令的優先級,而無需重新啟動它。以下命令會將名為“mysql”的所有正在執行的任務調整為 +13,這是一個低得多的優先級:
renice -n 13 -p `pidof mysql`
至於 ionice,我無法發表評論,但我猜它可以讓你用 IO 做類似的事情。影響某些任務執行多少 io,例如磁碟讀/寫。如有必要,在限製備份過程中是否有用?