由於經常學習Unix系統的一些知識,而且很喜歡Unix系統,在工作中也很喜歡總結關於Unix系統相關的經驗教訓,今天因工作需要,要抓取Unix系統top記錄中的CPU統計這行,類似如下的內容:
- CPU states: 68.3% idle, 22.3% user, 7.6% kernel, 1.8% iowait, 0.0% swap
Unix系統需要把這段內容重定向到文件中,但是使用top -b 這樣的參數不能實現這樣的效果,重定向到文件中的內容如下:
- last pid: 53372; load averages: 0.00, 0.00, 0.00 up 1+03:32:16 18:28:11
- 37 processes: 1 running, 35 sleeping, 1 zombie
- Mem: 22M Active, 342M Inact, 60M Wired, 2068K Cache, 111M Buf, 459M Free
- Swap: 6144M Total, 6144M Free
Unix系統中間丟失了有關CPU統計的信息。
覺得比較奇怪,於是找來了另外一台FreeBSD的機器來看看(公司的是solaris),結果也是同樣的情況。問別人是否知道,結果她給我了一串top -b -n 1 -c > top.log。我試了下,不行!但是她說她那邊是可以的。於是我問了下她用的是不是Unix系統,結果是linux的。可能找到問題了,於是我找來一個linux的機器測試了下,果然跟操作系統有關。
最後還是在一個之前看過的網頁中找到了辦法,這個網頁之前被我忽略了,以為是一般的問題。後來按照上面說的以-d參數來實現(應該是指delay的意思吧)。top -d 2 這樣就有了,
如下:
- last pid: 53376; load averages: 0.00, 0.00, 0.00 up 1+03:32:48 18:28:43
- 39 processes: 1 running, 37 sleeping, 1 zombie
- CPU states: % user, % nice, % system, % interrupt, % idle
- Mem: 23M Active, 342M Inact, 60M Wired, 2068K Cache, 111M Buf, 457M Free
- Swap: 6144M Total, 6144M Free
原來是Unix系統在統計信息的時候,一開始沒有CPU的信息,需要過幾秒種才有顯示。這就是-d參數的作用了。完整的用法:top -d 2 0 | grep CPU。這樣就顯示了上面開始時所提出的顯示內容了。