當前位置:首頁 » 網頁前端 » linuxtop收集腳本
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

linuxtop收集腳本

發布時間: 2022-08-31 00:27:37

1. 在linux環境下資料庫信息收集腳本

#!/bin/bash tmptty=`tty` tmptty=`basename $tmptty` tmpname=`whoami` ip="xxx" #目標主機地址 inp1="xxx^M" #主機的用戶名,,注意必須有^M inp2="xxx^M" #主機的密碼,注意必須有^M inp3="ls^M" inp4="pwd^M" inputfile=in outputfile=out.log rm -fr $inputfile rm -fr $outputfile mknod $inputfile p touch $outputfile #file description 7 for out and 8 for in exec 7<>$outputfile exec 8<>$inputfile telnet $ip <&8 >&7 & sleep 2; echo $inp1 >> $inputfile sleep 2; echo $inp2 >> $inputfile sleep 2; echo $inp3 >> $inputfile sleep 2; echo $inp4 >> $inputfile tail -f $outputfile & while true do read str if [[ $str = "quit" $str = "exit" ]] then echo $str >> $inputfile exit else echo $str >> $inputfile fi done ps -ef grep telnet grep -v grep grep -v telnetd grep $tmptty grep $tmpname awk '{print " kill -9", $2}' sh ps -ef grep tail grep -v grep grep -v telnetd grep $tmptty grep $tmpname awk '{print " kill -9", $2}' sh

2. java如何調用Linux下的top命令

Runtime.getRuntime().exec("top -n 1>text.txt");


test.sh:
#!/bin/bash
top -n 1>test.txt

Runtime.getRuntime().exec("test.sh");
Runtime.getRuntime().exec("bash test.sh");

多試試,肯定是這樣調用的,只有這個方法是調用本地進程的。

3. linux系統top給出的信息都有哪些

Linux新手,個人認為首先就應該了解一下top命令各項的含義.
不用有事就問什麼搜索引擎,先看看man top.
top - 16:12:56 up 1 day, 22 min, 4 users, load average: 0.02, 0.04, 0.05
Tasks: 158 total, 1 running, 156 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.8 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 1017912 total, 895892 used, 122020 free, 15312 buffers
KiB Swap: 1045500 total, 19608 used, 1025892 free. 230012 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5761 eechen 20 0 32144 1548 1076 R 6.2 0.2 0:00.01 top

16:12:56 up 1 day, 22 min, 4 users, load average: 0.02, 0.04, 0.05

這句等同於執行 uptime 命令返回的內容.
16:12:56 是當前時間(date).
up 1 day, 22 min 表示系統已經運行1天又22分鍾(uptime -p).
4 users 表示當前登錄系統的用戶(w,who).
load average 表示系統負載,分別是1分鍾,5分鍾,15分鍾前到現在的負載平均值.
Tasks: 158 total 表示系統的進程數(數目等於ps -ef|wc -l的值減去2),按大寫H可以切換到線程模式.
running表示正在運行的進程,sleeping表示睡眠的進程,stopped表示暫停的進程,zombie表示已結束但還沒有從進程表中刪除的僵屍進程.
total表示總內存,used表示已經使用的內存,free表示空閑的內存,按E可以切換單位.
buffers(Buffer Cache)表示塊設備的讀寫緩沖區佔用的內存,cached(Page Cache)表示文件系統緩存佔用的內存.
buffers:塊設備緩沖 cached:文件系統緩存
如果cached的值很大,說明cache住的文件數很多.如果頻繁訪問到的文件都能被cache住,那麼磁碟的讀I/O就非常小.
所謂塊設備是指對其信息的存取以"塊"為單位,如通常的光碟,硬磁碟,軟磁碟,磁帶等,塊長取512位元組或1024位元組或4096位元組.
塊設備可以直接通過塊設備特別文件來訪問,為了提高數據傳輸效率,塊設備驅動程序內部採用塊緩沖技術.
Swap是交換空間,交換空間在物理內存(RAM)被充滿時被使用.
如果系統需要更多的內存資源,而物理內存已經充滿,內存中不活躍的頁就會被移到交換空間去.
雖然交換空間可以為帶有少量內存的機器提供幫助,但是這種方法不應該被當做是對內存的取代.
交換空間位於硬碟驅動器上,它比進入物理內存要慢.
load average的理解:
load average指的是處於task_running或task_uninterruptible狀態的進程(或線程)數的平均值.
處於task_running狀態的進程(或線程),可能正在使用CPU或排隊等待使用CPU.
處於task_uninterruptible狀態的進程(或線程),可能正在等待I/O,比如等待磁碟I/O.這時I/O等待佔用的CPU時間百分比iowait(wa)可能會比較高.
sudo strace -p `pidof top` 可見top從/proc讀取了很多信息.
man proc 查看 /proc/loadavg 的說明:
man proc | col -b > proc.txt
/proc/loadavg 內容:
0.22 0.13 0.14 2/374 5306

0.22 0.13 0.14表示在過去的1分鍾,5分鍾,15分鍾,
正在運行(task_running)或等待IO(task_uninterruptible)的任務的數量.
2/374中的2表示當前運行的線程數,374則表示系統當前存在的內核調度實體(進程/線程)的數量.
5306是系統最近創建的進程PID編號.
又比如:
load average: 31.09, 29.87, 29.92

表示在過去的1分鍾,5分鍾,15分鍾的時間里,CPU任務隊列中平均有30個程序(這里應該是30個Java線程)在使用CPU.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java

Java進程的CPU使用率%CPU達到3090%,表示這個Java進程正在使用31個CPU核心,
這樣對上了上面load average得出的數據,也就是有30個左右的Java線程正在使用30個CPU核心.
按H(區分大小寫)切換到線程模式,因為一個線程最多隻能使用一個核心,所以線程模式下顯示的CPU使用率不會超過100%.
當CPU和磁碟都忙不過來的時候,開再多的進程也沒有任何意義,只會徒增CPU上下文切換和磁碟I/O等待,得不償失.
系統負載高,普遍是因為系統進程數太多,I/O太多導致的.
load average小於1表示系統空閑,大於1表示系統開始繁忙.
Linux伺服器的任務(進程)數量保持在200個以下是比較好的,最好不要超過300個.
us, user : time running un-niced user processes 用戶空間進程佔用CPU時間百分比
sy, system : time running kernel processes 內核進程佔用CPU時間百分比
ni, nice : time running niced user processes 用戶空間內改變過優先順序的進程佔用CPU時間百分比
id, idle : time spent in the kernel idle handler 空閑CPU時間百分比(100%表示系統完全空閑)
wa, iowait : time waiting for I/O completion I/O等待佔用的CPU時間百分比
hi : time spent servicing hardware interrupts 硬體中斷佔用CPU時間百分比
si : time spent servicing software interrupts 軟體中斷佔用CPU時間百分比
st : time stolen from this vm by the hypervisor 虛擬化hypervisor從當前虛擬機vm偷走的時間
如果st這個值很高的話,說明你的VPS提供商的CPU資源有限,而你沒能搶過別人,很有可能就是VPS提供商超售了.

按F選擇要顯示的列和查看每列的含義,默認有下面這些列:
PID = Process Id
USER = Effective User Name
PR = Priority PR和NI的值越高越友好即越不競爭資源,比如PR 20和NI 0,另外,PR=NI+20.
NI = Nice Value 負值表示高優先順序,正值表示低優先順序,比如kworker的NI為-20,PR為0.
VIRT = Virtual Image (KiB)
RES = Resident Size (KiB) 常駐內存,按E切換單位.
SHR = Shared Memory (KiB)
S = Process Status
%CPU = CPU Usage 四核處理器在Tasks模式下滿載為400%,在Threads模式(按H切換)下滿載為100%(一個線程最多隻能使用一個核心).按Shift+P按CPU使用率排序.
%MEM = Memory Usage (RES) 滿載為100%,按Shift+M按RES內存排序.
TIME+ = CPU Time, hundredths 進程使用的CPU時間總計.比如2:32.45代表2分鍾32.45秒.
COMMAND = Command Name/Line

按F進入域管理窗口後按A可以切換顯示模式,按空格選中要顯示的列,按S按指定列排序,用向右方向鍵選中列後可以調整順序.修改後按Shift+W保存設置到~/.toprc文件.
top裡面按Shift+M是按內存排序,按E是切換內存單位,按Shfit+W保存設置.
然後執行top -n1 -b可以看到按內存排序的所有進程的信息.
或者ps後用sort排序:
ps aux | sort -k4nr | head -n5

top里按C或者使用-c參數可以看到進程的絕對路徑和啟動參數,就可以得到類似ps -ef和ps aux提供的信息了.
看進程路徑: top -p `pidof firefox` -c -n1
看進程線程: top -p `pidof firefox` -H -n1

Linux Process Status:
http://blog.csdn.net/tianlesoftware/article/details/6457487
R (task_running) : 可執行狀態
S (task_interruptible): 可中斷的睡眠狀態
D (task_uninterruptible): 不可中斷的睡眠狀態
T (task_stopped or task_traced): 暫停狀態或跟蹤狀態
Z (task_dead - exit_zombie): 退出狀態,進程成為僵屍進程
X (task_dead - exit_dead): 退出狀態,進程即將被銷毀
running進程:
只有在該狀態的進程才可能在CPU上運行。
而同一時刻可能有多個進程處於可執行狀態,這些進程的task_struct結構(進程式控制制塊)被放入對應CPU的可執行隊列中(一個進程最多隻能出現在一個CPU的可執行隊列中)。
進程調度器的任務就是從各個CPU的可執行隊列中分別選擇一個進程在該CPU上運行。
很多操作系統教科書將正在CPU上執行的進程定義為RUNNING狀態、而將可執行但是尚未被調度執行的進程定義為READY狀態,這兩種狀態在Linux下統一為TASK_RUNNING狀態。
sleeping進程:
處於這個狀態的進程因為等待某某事件的發生(比如等待socket連接、等待信號量),而被掛起。
這些進程的task_struct結構被放入對應事件的等待隊列中。當這些事件發生時(由外部中斷觸發、或由其他進程觸發),對應的等待隊列中的一個或多個進程將被喚醒。
通過ps命令我們會看到,一般情況下,進程列表中的絕大多數進程都處於task_interruptible狀態(除非機器的負載很高)。
畢竟CPU就這么一兩個,進程動輒幾十上百個,如果不是絕大多數進程都在睡眠,CPU又怎麼響應得過來。
stopped進程:
向進程發送一個sigstop信號,它就會因響應該信號而進入task_stopped狀態,除非該進程本身處於task_uninterruptible狀態而不響應信號。
sigstop與sigkill信號一樣,是非常強制的。不允許用戶進程通過signal系列的系統調用重新設置對應的信號處理函數。
向進程發送一個sigcont信號,可以讓其從task_stopped狀態恢復到task_running狀態。
當進程正在被跟蹤時,它處於task_traced這個特殊的狀態。「正在被跟蹤」指的是進程暫停下來,等待跟蹤它的進程對它進行操作。
比如在gdb中對被跟蹤的進程下一個斷點,進程在斷點處停下來的時候就處於task_traced狀態。而在其他時候,被跟蹤的進程還是處於前面提到的那些狀態。
對於進程本身來說,task_stopped和task_traced狀態很類似,都是表示進程暫停下來。
而task_traced狀態相當於在task_stopped之上多了一層保護,處於task_traced狀態的進程不能響應sigcont信號而被喚醒。
只能等到調試進程通過ptrace系統調用執行ptrace_cont、ptrace_detach等操作(通過ptrace系統調用的參數指定操作),或調試進程退出,被調試的進程才能恢復task_running狀態。
zombie進程:
在Linux進程的狀態中,僵屍進程是非常特殊的一種,它是已經結束了的進程,但是沒有從進程表中刪除。
太多了會導致進程表裡面條目滿了,進而導致系統崩潰,倒是不佔用其他系統資源。
它已經放棄了幾乎所有內存空間,沒有任何可執行代碼,也不能被調度,
僅僅在進程列表中保留一個位置,記載該進程的退出狀態等信息供其他進程收集,除此之外,僵屍進程不再佔有任何內存空間。
進程在退出的過程中,處於TASK_DEAD狀態。在這個退出過程中,進程佔有的所有資源將被回收,除了task_struct結構(以及少數資源)以外。
於是進程就只剩下task_struct這么個空殼,故稱為僵屍。
之所以保留task_struct,是因為task_struct裡面保存了進程的退出碼、以及一些統計信息。
而其父進程很可能會關心這些信息。比如在shell中,$?變數就保存了最後一個退出的前台進程的退出碼,而這個退出碼往往被作為if語句的判斷條件。
當然,內核也可以將這些信息保存在別的地方,而將task_struct結構釋放掉,以節省一些空間。
但是使用task_struct結構更為方便,因為在內核中已經建立了從pid到task_struct查找關系,還有進程間的父子關系。
釋放掉task_struct,則需要建立一些新的數據結構,以便讓父進程找到它的子進程的退出信息。
子進程在退出的過程中,內核會給其父進程發送一個信號,通知父進程來「收屍」。
父進程可以通過wait系列的系統調用(如wait4、waitid)來等待某個或某些子進程的退出,並獲取它的退出信息。
然後wait系列的系統調用會順便將子進程的屍體(task_struct)也釋放掉。
這個信號默認是SIGCHLD,但是在通過clone系統調用創建子進程時,可以設置這個信號。
如果他的父進程沒安裝SIGCHLD信號處理函數調用wait或waitpid()等待子進程結束,又沒有顯式忽略該信號,那麼它就一直保持僵屍狀態,子進程的屍體(task_struct)也就無法釋放掉。
如果這時父進程結束了,那麼init進程自動會接手這個子進程,為它收屍,它還是能被清除的。
但是如果如果父進程是一個循環,不會結束,那麼子進程就會一直保持僵屍狀態,這就是為什麼系統中有時會有很多的僵屍進程。
當進程退出的時候,會將它的所有子進程都託管給別的進程(使之成為別的進程的子進程)。
託管的進程可能是退出進程所在進程組的下一個進程(如果存在的話),或者是1號進程。
所以每個進程、每時每刻都有父進程存在。除非它是1號進程。1號進程,pid為1的進程,又稱init進程。
Linux系統啟動後,第一個被創建的用戶態進程就是init進程。它有兩項使命:
1、執行系統初始化腳本,創建一系列的進程(它們都是init進程的子孫);
2、在一個死循環中等待其子進程的退出事件,並調用waitid系統調用來完成「收屍」工作;
init進程不會被暫停、也不會被殺死(這是由內核來保證的)。它在等待子進程退出的過程中處於task_interruptible狀態,「收屍」過程中則處於task_running狀態。

4. 如何解讀系統

具體點!什麼系統! 補充: linux系統 ??? top · sar · vmstat · iostat · free 可以作為普通用戶運行這些工具。它們都利用/pro c文件 系統得 到它們的數據。這些性能工具和幾個rpm一起提供。procps rpm提供top、free和vmstat。sysstat rpm提供sar和iostat。 top命令是一個優秀的互動式實用工具,用於監視性能。它提供關於整體Linux性能的幾個概要行,但是報告進程信息才是top真正的 長處 。可以廣泛自定義進程顯示,也可以添加欄位,按照不同指標排序進程列表,甚至從top注銷進程。 sar實用工具提供監視每一事件的能力。它至少有15個單獨的報告類別,包括CPU、 磁碟 、網路、進程、 交換區 等等。 vmst at命令 報告關於內存和交換區使用的廣泛信息。它也報告CPU和一些I/O信息。iostat報告 存儲 輸入/輸出(I/O) 統計資料 。 這些命令覆蓋許多相同的地方。 本節 討論如何使用這些命令並解釋每個命令產生的報告,並不討論所有15種sar 語法 ,但是介紹了其中最常見的。 3.1 top top命令是最流行的性能工具之一。大多 數系 統管理員運行top查看Linux和UNIX系統的運行情況。top實用工具提供一種監視進程和Linux 整體性 能的理想方法。將Linux進程稱作任務更准確,但是在本章中我們還是將它們稱作進程,因為這個工具也這樣稱呼它們。 1 普通用戶和root用戶都可以運行top。圖3-1顯示一個空閑系統的典型top輸出。 圖3-1 top輸出 top顯示有兩個部分。大約前三分之一顯示關於Linux的整體信息,其餘行為各個進程信息。如果擴展窗口則顯示更 多進程 而填充整個屏幕。 更全面的Linux信息可以通過使用top之外的幾個命令來得到。不過,通過一個命令在一個屏幕上顯示所有信息比較理想。第一行顯示最近1分鍾、5分鍾和15分鍾的負載平 均值 。負載平均值表示在CPU上運行或者等待運行多少進程。uptime命令也可以用來顯示負載平均值。接下來是進程信息,之後是CPU、內存和交換區。內存和交換區信息與free命令輸出類似。在我們確定內存和CPU使用之後的下一個問題是哪些進程正在使用它。 大部分進程信息也可以通過ps命令得到,但是top提供一種更易於閱讀的格式。最有用的是用於提供幫助的h,它列出top的其他互動式命令。 3.1.1 添加和移除欄位 欄位可以從顯示中添加或移除。進程輸出可以按照CPU、內存或者其他指標排序。這是一個查看什麼進程搶奪內存的理想方法。各個Linux發布版本的top語法和互動式選項不同,幫助命令可以快速列出什麼命令可用。有許多互動式選項可用,用戶應該花費一些時間來試驗它們。 圖3-2顯示Red Hat Enterprise Linux ES release 3的幫助屏幕。 圖3-2 top的幫助屏幕 f命令用來從top輸出中添加或者移除欄位。圖3-3是一個Red Hat Enterprise Linux ES release 3的幫助屏幕,顯示什麼欄位可以添加。 圖3-3 top添加/移除欄位的屏幕 圖3-4顯示一個SUSE Linux 9.0 top的幫助屏幕,可見它們提供的命令差別非常大。 圖3-4 SUSE top的幫助屏幕 3.1.2 解釋輸出 讓我們研究top信息的意義,以top的如下輸出為例: top輸出的第一行顯示負載平均值信息: 這個輸出與uptime的輸出類似。從中可看到Linux已經運行時間、當前時間和用戶數量,以及1分鍾、5分鍾和15分鍾負載平均值。接下來顯示進程概要: 我們看到總共有73個進程,其中72個進程正在休眠,一個進程正在運行,沒有 僵化 進程或者被停止的進程。當一個進程退出並且它的父進程沒有通過wait(2)或者waitpid(2)函數等待它時,它就會成為僵化進程。這通常是由於父進程在它的子進程之前退出造成的。不同於進程表中的項,僵化進程不使用資源。停止的進程是已經向它發送STOP信號的進程。更多信息,請參見signal(7)手 冊頁 。 接下來是CPU信息: CPU行描述CPU如何使用它們的CPU周期。top命令報告CPU在用戶或者 內核模式 、運行良好進程以及處在 空閑狀態 時所花費時間的百分比。iowait列顯示沒有進程在CPU上運行時, 處理器 等待I/O完成的時間的百分比。irq和softirq列表示處理硬體和 軟體中斷 所花費的時間。早於2.6版本的Linux內核不報告irq、softirq和iowait。 接下來是內存信息: 前三個指標提供內存使用的概要,列出了總的可用內存、已使用內存和自由內存,它們都是確定對於Linux內存是否足夠所需信息。 接下來五個指標標識已使用的內存如何分配。shrd欄位顯示共享的內存使用,buff是緩沖使用的內存。分配給內核或者 用戶進程 的內存可以處在三種不同狀態:活動(active)、不活動臟(inactive dirty)和不活動干凈(inactive clean)。活動在top中用aotv表示,表示該內存最近被使用。不活動臟在top中用in_d表示,表示該內存最近沒有使用,可以回收。要回收內存,必須將它的內容寫到磁碟,這個進程命名為「清洗」,也可稱作內存的第四種臨時狀態。一旦被清洗,不活動臟內存成為不活動干凈內存,在top中用in_c表示。由Norm Murray和Neil Horman合著的Understanding Virtual Memory in Red Hat Enterprise Linux 3是一本優秀的參考書,網址為http:people.redhat.com/nhorman/papers/ rhel3_vm.pdf。 接下來是交換區信息: av欄位是可用的交換區總量,之後是已用數量和自由數量,最後是內核用於緩存的內存數量。 top顯示的其餘部分是進程信息: top顯示盡可能多的能適合屏幕的進程。top(1)手冊頁中提供了欄位說明的描述。表3-1提供了這些欄位的概要。 表3-1 top進程欄位 欄位 說明 PID 進程id編號 USER 進程所有者的用戶名 PRI 進程的 優先順序 SIZE 進程大小,包括它的代碼、棧和 數據區 域,以 千位元組 為單位 RSS 進程使用的內存總量,以千位元組為單位 SHARE 進程使用的 共享內存 數量 STAT 進程的狀態,通常R表示運行,S表示休眠 %CPU 自從最近的屏幕更新以來,這個進程使用的CPU百分比 %MEM 這個進程使用的內存百分比 TIME 自從進程啟動以來,這個進程使用的CPU時間量 CPU 最近執行進程的CPU COMMAND 正在執行的命令 3.1.3 保存自定義 一個非常好的top功能是保存當前配置。可以使用互動式命令s任意更改顯示,然後按w保存該視圖。 top在用戶的主目錄中寫入一個.toprc文件,用來保存配置,以便下一次這個用戶啟動top時使用相同的 顯示選項 。 top也尋找默認配置文件/etc/toprc。這是一個全局配置文件,當任何用戶運行實用工具時,top將讀取該文件。這個文件可以使top以安全模式運行,也可以設置刷新延遲。安全模式阻止非root用戶注銷或者更改進程的 正常值 ,也阻止非root用戶更改top的刷新值。Red Hat Enterprise Linux ES release 3的一個/etc/toprc示例文件如下所示: s表示安全模式,3定義三秒鍾 刷新間隔 。其他發布版本可能有不同的/etc/toprc格式。注銷進程是一個非常實用的功能。如果用戶有一個失控的進程,通過top命令可以輕易找到並注銷它,具體步驟為:運行top,通過u命令顯示用戶的所有進程,然後使用k注銷它。top不只是一個優秀的性能監視工具,它也可以用來通過注銷那些產生問題的進程從而改進性能。 3.1.4 批處理 模式 top也可以以批處理模式運行。嘗試運行以下命令: -n 1告訴top只顯示一次 迭代 ,-b選項表示以適合寫入文件的文本形式輸出或者定向到另一個程序(例如less)。類似以下兩行腳本的命令可以順利完成cron工作: 可以將它添加到crontab,並每隔15分鍾收集一次輸出。 通過批處理可以輕松完成所有任務,無需用戶的干涉。所有進程都被列出,輸出並不是每5秒鍾刷新一次。如果用戶的主目錄中存在一個.toprc配置文件,那麼它用來格式化顯示。以下是在一個多CPU Linux 伺服器 上運行top批處理模式的輸出。注意,其中沒有顯示top輸出的所有258個進程。 現在讀者可能明白了為什麼top會如此流行。top的互動式本質和容易自定義輸出的能力使它成為診斷問題的優秀工具。 3.2 sar sar是一個優秀的一般性能監視工具,它可以輸出Linux所完成的幾乎所有工作的數據。sar命令在sysetat rpm中提供。示例中使用sysstat版本5.0.5,這是穩定的最新版本之一。關於版本和下載信息,請訪問sysstat主頁 http://perso.wanadoo.fr/sebastien.godard/ 。 sar可以顯示CPU、運行 隊列 、磁碟I/O、分頁(交換區)、內存、CPU中斷、網路等性能數據。最重要的sar功能是創建數據文件。每一個Linux系統都應該通過cron工作收集sar數據。該sar數據文件為 系統管理員 提供歷史性能信息。這個功能非常重要,它將sar和其他性能工具區分開。如果一個夜晚批處理工作正常運行兩次,直到下一個早上才會發現這種情況(除非被叫醒)。我們需要具備研究12小時以前的性能數據的能力。sar 數據收集 器提供了這種能力。有許多報告語法,我們首先討論數據收集。 3.2.1 sar數據收集器 sar數據收集通過/usr/lib/sa中的一個 二進制 可執行文件 和兩個腳本來完成。sar數據收集器是一個位於/usr/lib/sa/sadc的二進制可執行文件。sadc的工作是寫入數據收集文件/var/1og/sa/。可以為sadc提供幾個選項。常見語法是: 間隔是取樣間的秒數,iterations是要取得的 樣本數 量,file name定義 輸出文件 。簡單的sadc語法是/usr/lib/sa/sadc 360 5/tmp/sadc.out。這個命令在5分鍾間隔取得5個樣本並將它們保存在/tmp/sadc.out。我們應該定期收集樣本,因此需要一個由cron運行的腳本。應該把樣本放在一個有意義的地方,如在前一節中使用top腳本時那樣。sysstat rpm提供/usr/lib/sa/sa1腳本來完成所有這些事情。 sa1(8)手冊頁比sa1腳本本身要長得多。/usr/lib/sa/sa1是一個非常簡單的腳本,使用語法sadc -F -L 1 1 /var/log/sa/sa##來運行sadc,其中##是某月的日期。較老版本的sa1使用date+.%Y_%m_%d的輸出作為文件後綴。如果需要,可以使用-F選項使sadc強制創建輸出文件。-L在寫入輸出文件之前鎖定它,以防止兩個sadc進程同時運行時損壞該文件。較老版本的sadc沒有-L選項,因此sa1 腳本執行 手工 鎖定。sa1腳本的選項只是樣本之間的間隔和取樣迭代的次量。cron文件(/etc/cron.d/sysstat)和sysstat一起提供,在各sysstat版本之間它有所不同。以下是5.0.5版本的sysstat的條目: 可見,在sysstat rpm安裝之後,sadc開始取得樣本。sysstat主頁是 http://perso.wanadoo.fr/ sebastien.godard/ 2 。文檔鏈接提供以下類似2006年1月14日的crontab方案: Sebastien Godard的網站的crontab示例建議周一至周五從早晨8點到下午6點每10分鍾取一次樣本,其他時間每小時取得一個樣本(注意,crontab注釋為下午7點,但實際上是18:00,即下午6點)。如果/var中的磁碟空間足夠,可以每天都每小時的每10分鍾取樣一次。如果周末備份較慢,每小時一次sadc取樣可能幫助不大。 現在讓我們研究更流行的報告語法。 3.2.2 CPU 統計數據 sar -u輸出顯示CPU信息。-u選項是sar的默認選項。該輸出以百分比顯示CPU的使用情況。表3-2解釋該輸出。 表3-2 sar -u欄位 欄位 說明 CPU CPU編號 %user 在用戶模式 中運 行進程所花的時間 %nice 運行正 常進 程所花的時間 %system 在內核模式(系統)中運行進程所花的時間 %iowait 沒有進程在該CPU上執行時,處理器等待I/O完成的時間 %idle 沒有進程在該CPU上執行的時間 這些看起來應該比較熟悉,它和top報告中的CPU信息內容相同。以下顯示 輸出格式 : 其中的5 10導致sar以5秒鍾間隔取得10個樣本。任何sar報告的第一列都是 時間戳 。 我們本來可以研究使用-f選項通過sadc創建的文件。這個sar語法顯示sar -f/var/log/ sa/sa21的輸出: 在多CPU Linux系統中,sar命令也可以為每個CPU分解該信息,如以下sar -u -P ALL 5 5輸出所示:

5. Linux執行下面的腳本後只有Top的輸出是亂碼,求解決方法。

使用文本編輯器打開是亂碼,使用cat命令查看文本內容就正常了,原因應該還是編碼問題

6. linux腳本,實現監控進程的CPU和內存值

你可以用top指令,加入你的進程id是1009,你可以使用如下命令試試監控他的性能指標:

top-p1009

7. linux的top命令通過查詢哪個文件得到信息。有個實驗,要自己寫一段能實現top功能的C代碼。請高手指點!

我只知道兩個,一是/proc/cupinfo ,二是/proc/meminfo。