论坛首页 综合技术论坛

每日一搬(2):程序管理

浏览 1833 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-15  

 

程序观察:ps  top  pstree

 

ps : 观察程序的执行情况,特别zombile程序

 

ps aux

ps命令的参数很多,man ps 便可以知道,建议使用上面的命令即可。

 

top : 动态的监控现有程序的运行情况,默认为5秒

 

top -d 2

 上面的命令是2秒执行一次刷新。

 

pstree : 已树状的形式查看程序的运行情况

 

这个命令用于跟踪,僵尸zombile的源头很有用。

 

 

程序删除:kill   killall

 

 

 

 kill 22236

 kill sh

 # kill -HUP [pid]
        
    


SIGHUP的发音是“sig-hup”,是signal hangup的缩写,含义是“中止信号”。你如何发送一个SIGHUP信号呢?这里有几种方式:

#

# kill -1 [pid]

# killall -1 [process-name]

 

 

 

系统资源的观察:free uname  uptime  netstat  dmesg dar

 

 

--------------------------------------------------------------------------------
free
[root@linux ~]# free [-b|-k|-m|-g] [-t]
參數:
-b  :直接輸入 free 時,顯示的單位是 Kbytes,我們可以使用 b(bytes), m(Mbytes)
      k(Kbytes), 及 g(Gbytes) 來顯示單位喔!
-t  :在輸出的最終結果,顯示實體記憶體與 swap 的總量。
範例:
範例一:顯示目前系統的記憶體容量
[root@linux ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           376        366         10          0        129         94
-/+ buffers/cache:        141        235
Swap:          996          0        995
仔細看看,我的系統當中有 384 MB 左右的實體記憶體,我的 swap 有 1GB 左右, 那我使用 free -m
以 MBytes 來顯示時,就會出現上面的資訊。Mem 那一行顯示的是實體記憶體的量, Swap 則是虛擬記
憶體的量。 total 是總量, used 是已被使用的量, free 則是剩餘可用的量。 後面的
shared/buffers/cached 則是在已被使用的量當中,用來作為緩衝及快取的量。
仔細的看到範例一的輸出喔,我的 Linux 主機是很平凡的,根本沒有什麼工作, 但是,我的實體記憶
體是幾乎被用光光的情況呢!不過,至少有 129 MB 用在緩衝記憶工作, 94 MB 則用在快取工作,也就
是說,系統是『很有效率的將所有的記憶體用光光』, 目的是為了讓系統的存取效能加速啦!
很多朋友都會問到這個問題『我的系統明明很輕鬆,為何記憶體會被用光光?』 現在瞭了吧?沒有錯!
被用光是正常的!而需要注意的反而是 swap 的量。一般來說, swap 最好不要被使用,尤其 swap 最
好不要被使用超過 20% 以上, 如果您發現 swap 的用量超過 20% ,那麼,最好還是買實體記憶體來插
吧! 因為, Swap 的效能跟實體記憶體實在差很多,而系統會使用到 swap , 絕對是因為實體記憶體
不足了才會這樣做的!如此,瞭解吧!

--------------------------------------------------------------------------------
uname
[root@linux ~]# uname [-asrmpi]
參數:
-a  :所有系統相關的資訊;
-s  :系統核心名稱
-r  :核心的版本
-m  :本系統的硬體名稱
-p  :CPU 的類型
-i  :硬體的平台 (ix86)
範例:
範例一:輸出系統的基本資訊
[root@linux ~]# uname -a
Linux linux.site 2.6.12-1.1398_FC4 #1 Fri Jul 15 00:52:32 EDT 2005
i686 i686 i386 GNU/Linux
這個咚咚我們前面使用過很多次了喔!uname 可以列出目前系統的核心版本、 主要硬體平台以及 CPU
類型等等的資訊。以上面範例一的狀態來說,我的 Linux 主機使用的核心名稱為 Linux,而主機名稱為
linux.site,核心的版本為 2.6.12-1.1398_FC4,該核心版本建立的日期為 2005/07/15, 適用的硬體
平台為 i386 以上等級的硬體平台喔。

--------------------------------------------------------------------------------
uptime
這個指令很單純呢!就是顯示出目前系統已經開機多久的時間,以及 1, 5, 15 分鐘的平均負載就是了
。還記得 top 吧?沒錯啦! 這個 uptime 可以顯示出 top 畫面的最上面一行!
[root@linux ~]# uptime
18:06:30 up 52 days,  6:40,  1 user,  load average: 0.00, 0.00, 0.00
# 上面表示,目前是 18:06 ,本系統已經開機 52 天又 6:40 ,有 1 個使用者在線上,
# 平均負載很低,所以都是 0 啊!


--------------------------------------------------------------------------------
netstat
這個 netstat 也是挺好玩的,其實,這個指令比較常被用在網路的監控方面, 不過,在程序管理方面
也是需要瞭解的啦!這個指令的執行如下所示:基本上, netstat 的輸出分為兩大部分,上面是網路介
面相關的連線,下方則是與 unix 程序有關的項目。
[root@linux ~]# netstat -[atunlp]
參數:
-a  :將目前系統上所有的連線、監聽、Socket 資料都列出來
-t  :列出 tcp 網路封包的資料
-u  :列出 udp 網路封包的資料
-n  :不已程序的服務名稱,以埠號 (port number) 來顯示;
-l  :列出目前正在網路監聽 (listen) 的服務;
-p  :列出該網路服務的程序 PID
範例:
範例一:列出目前系統已經建立的網路連線與 unix socket 狀態
[root@linux ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State
tcp        0    256 59-125-83-224.ad:ssh linux.test.s:52679    ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  16     [ ]         DGRAM                    4870   /dev/log
unix  2      [ ]         DGRAM                    3561   @udevd
unix  3      [ ]         STREAM     CONNECTED     509237
# 在上面的結果當中,顯示了兩個部分,分別是網路的連線以及 linux 上面的 socket
# 連線狀態。在網路連線的部分主要內容為:
# Proto :網路的封包協定,主要分為 TCP 與 UDP 封包,相關資料請參考伺服器篇;
# Recv-Q:非由使用者程式連結到此 socket 的複製的總 bytes 數;
# Send-Q:非由遠端主機傳送過來的 acknowledged 總 bytes 數;
# Local Address  :本地端的 IP
# Foreign Address:遠端主機的 IP;
# State :連線狀態,主要有建立(ESTABLISED)及監聽(LISTEN);
# 至於 unix 傳統的 socket 連接狀態則是:
# Proto :一般就是 unix 啦;
# RefCnt:連接到此 socket 的程序數量;
# Flags :連線的旗標;
# Type  :socket 存取的類型。主要有確認連線的 STREM 與不需確認的 DGRAM 兩種;
# State :CONNECTED 表示已經連線建立。
# Path  :連接到此 socket 的相關程式的路徑!或者是相關資料輸出的路徑。
範例二:找出目前系統上已在監聽的網路連線及其 PID
[root@linux ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name
tcp        0      0 0.0.0.0:21      0.0.0.0:*        LISTEN  1598/vsftpd
tcp        0      0 127.0.0.1:25    0.0.0.0:*        LISTEN  1666/master
tcp        0      0 :::22           :::*             LISTEN  5281/sshd
udp        0      0 0.0.0.0:68      0.0.0.0:*                21339/dhclient
# 看到了嗎?最後面一個欄位就是該埠號被該 PID 或程式所啟動的!
範例三:將上述的本地端 0.0.0.0:21 那個網路服務關閉的話?
[root@linux ~]# kill 1598
[root@linux ~]# killall vsftpd
很多朋友常常有疑問,那就是,我的主機目前到底開了幾個門(ports), 呵呵!其實,不論主機提供什
麼樣的服務,一定必須要有相對應的 program 在主機上面執行才行啊! 舉例來說,我們鳥園的 Linux
主機提供的就是 WWW 服務,那麼我的主機當然有一個程式在提供 WWW 的服務啊!呵呵!那就是 Apache
這個套件所提供的啦! ^_^。 所以,當我執行了這個程式之後,我的系統自然就可以提供 WWW 的服務
了。那如何關閉啊? 就關掉該程式所觸發的那個程序就好了!例如上面的範例三所提供的例子啊! ^_^

--------------------------------------------------------------------------------
dmesg
在開機的時候你會發現有很多的訊息出現吧,例如 CPU 的形式、硬碟、 光碟型號及硬碟分割表等等,
這些資訊的產生都是核心 (kernel) 在進行硬體的測試與驅動啦。 但是訊息都是『刷』的一聲就跑過去
了!完全來不及看!傷腦筋~
這些訊息有時候對於系統管理員是很重要的,因為他提供了系統的資訊呀! 要看這些訊息你可以用
dmesg 這個指令來觀看! 因為訊息實在太多了,所以可以加入這個管線指令『 | more 』來使畫面暫停

範例一:輸出所有的核心開機時的資訊
[root@linux ~]# dmesg | more
範例二:搜尋開機的時候,硬碟的相關資訊為何?
[root@linux ~]# dmesg | grep -i hd
    ide0: BM-DMA at 0xffa0-0xffa7, BIOS settings: hda:DMA, hdb:DMA
    ide1: BM-DMA at 0xffa8-0xffaf, BIOS settings: hdc:DMA, hdd:pio
hda: ST320430A, ATA DISK drive
hdb: Maxtor 5T030H3, ATA DISK drive
hdc: CD-540E, ATAPI CD/DVD-ROM drive
.....底下省略.....
由範例二就知道我這部主機的硬碟是怎樣了吧?!沒錯啦! 還可以查閱能不能找到網路卡喔!網路卡的
代號是 eth ,所以,直接輸入 dmesg | grep -i eth 試看看呢!

--------------------------------------------------------------------------------
sar
這個 sar 並不是系統預設的安裝套件,如果您不是選擇全部安裝的話,這個套件預設是不裝的。 不過
,如果您是選擇全部安裝,嘿嘿!那就可以玩這個 sar 了。 這個 sar 的功能倒是可以玩一玩的,因為
他可以在您想要主動偵測主機的資源狀態, 然後繪製成為圖表時,相當好用的一個工具喔!
[root@linux ~]# sar [-ru] [秒數] [次數]
參數:
-u  :進行 CPU 資源的統計;
-r  :進行主記憶體目前狀態的分析
範例:
範例一:統計目前主機 CPU 狀態,每秒一次,共計三次!
[root@linux ~]# sar -u 1 3
Linux 2.6.12-1.1398_FC4 (vbird.vbird.idv.tw)    09/16/05
14:16:17          CPU     %user     %nice   %system   %iowait     %idle
14:16:18          all      0.00      0.00      0.00      0.00    100.00
14:16:19          all      0.00      0.00      0.00      0.00    100.00
14:16:20          all      0.00      0.00      0.00      0.00    100.00
Average:          all      0.00      0.00      0.00      0.00    100.00
# 我這部主機單純用在家裡測試的,所以沒有什麼網路服務,看的出來,嘿嘿!很安靜!
範例二:統計目前主機記憶體的使用情況
[root@linux ~]# sar -r 1 3
Linux 2.6.12-1.1398_FC4 (vbird.vbird.idv.tw)    09/16/05
14:17:40    kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree
14:17:41        26004    359672     93.26    127528     83996   1019236
14:17:42        26004    359672     93.26    127528     83996   1019236
14:17:43        26004    359672     93.26    127528     83996   1019236
Average:        26004    359672     93.26    127528     83996   1019236
# 其實這個與 free 的輸出結果也差不了太多啦!
鳥哥倒是很喜歡使用 sar 來做背景主動偵測系統 CPU 的動作!
--------------------------------------------------------------------------------


部分信息出处

 

 

我正好用到一个取某个月的月份命令:

 

 

**前一个天的日期**

date -d"1 day ago" +"%y%m%d"
date -d "yesterday" +"%y%m%d"

**前一个月的日期**
date -d"1 month ago" +"%y%m%d"

类似的还有

date -d"-1 day ago 1 month ago" +"%y%m%d"
date -d"1 day ago -1 year ago 1 month ago" +"%y%m%d"
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics