發現瓶頸 作業系統的剖析

2021-08-30 01:59:21 字數 3277 閱讀 2351

檢視作業系統統計資訊是非常有用的,這樣可以發現作業系統和硬體的工作情況。它不僅僅能幫助剖析整個應用,也可以幫助解決修復一些問題。

這部分的作業系統主要是類unix的系統,因為大部分伺服器都是用它們。然而,你也可以使用其中的一些技術用於其他的作業系統,只要它們都提供資訊就行。

我們經常使用的工具是vmstat,iostat,mpstat以及strace.這些工具在結合程序,cpu,記憶體以及i/o活動上,有著稍微不同的角度。這些工具對於類unix系統都基本可用。我們將教你使用這些工具,貫穿於本教程。

有一組工具是用來發現網路活動以及解決基本的問題(先不討論它們其他的細節)。乙個例子,我們教你怎樣跟蹤乙個mysql的連線從另乙個伺服器返回到起點伺服器。

先從mysql的show processlist開始,要注意的是乙個程序的host列。我們使用如下的例子:

*************************** 21. row ***************************

id: 91296

user: web

host: sargon.cluster3:37636

db: main

command: sleep

time: 10

state:

info: null

root@sargon# netstat -ntp | grep :37636

tcp 0 0 192.168.0.12:37636 192.168.0.21:3306 established 16072/apache2

最後兩個欄位是程序號和程序名稱:這個例子中程序號為16072的程序開放了鏈結,它是來自apache的。一旦你知道了程序號16072,你能知道關於這程序的許多資訊。比如其他的網路連線到了這個程序:

root@sargon# netstat -ntp | grep 16072/apache2

tcp 0 0 192.168.0.12:37636 192.168.0.21:3306 established 16072/apache2

tcp 0 0 192.168.0.12:37635 192.168.0.21:3306 established 16072/apache2

tcp 0 0 192.168.0.12:57917 192.168.0.3:389 established 16072/apache2

看起來有apache工作程序有兩個mysql連線開放,以及還有乙個其他的連線。什麼是389埠。不能確定,有許多應用程式都用到了這個埠。比如mysql的預設埠就是3306。在/etc/services有個列表,讓我們看看:

root@sargon# grep 389 /etc/services

ldap 389/tcp # lightweight directory access protocol

ldap 389/udp

我們發現這個伺服器使用了ldap認證。因此ldap才有意義。讓我們再看看還能找到程序16702其他的資訊。可以使用ps很容易檢視程序正在做什麼。命令如下:

root@sargon# ps -eaf | grep 'uid\|16072'

uid pid ppid c stime tty time cmd

apache 16072 22165 0 09:20 ? 00:00:00 /usr/sbin/apache2 -d default_vhost...

你可以用潛在的資訊找出其他的問題。不要驚訝,比如,對於apache要找出乙個ldap或者nfs服務所引起的問題以及顯示頁面生成時間(page-generation)。

你也能用lsof命令檢視那些執行緒開啟的檔案。這是對於查詢所有資訊排序是非常有用的,因為在unix中所有的都是檔案。我們不會把輸出在這全部顯示,因為資訊量太大,但是你可以lsof|grep 16072找到這個程序所開啟檔案。當netstat不好用的時候,你也可以使用lsof找出網路連線。比如,如下的lsof命令顯示的資訊和netstat資訊一樣。我們把資訊重寫排下格式:

root@sargon# lsof -i -p | grep 16072

apache2 16072 apache 3u ipv4 25899404 tcp *:80 (listen)

apache2 16072 apache 15u ipv4 33841089 tcp sargon.cluster3:37636->

hammurabi.cluster3:3306 (established)

apache2 16072 apache 27u ipv4 33818434 tcp sargon.cluster3:57917->

romulus.cluster3:389 (established)

apache2 16072 apache 29u ipv4 33841087 tcp sargon.cluster3:37635->

hammurabi.cluster3:3306 (established)

在gnu/linux,/proc能提供其他未知錯誤解決方法的幫助。每個程序在/proc下都有自己的目錄。你可以檢視到很多資訊,比如當前工作的目錄,記憶體的使用以及等等。

apache有類似ps命令的功能:/server-status/ url.舉個例子,如果你內網執行apache在http://intranet/.你可以檢視http://intranet/server-status/檢視apache的情況。這個功能能幫助你檢視這個程序提供了什麼url。這個頁面有個圖例來解釋這些輸出。

你也可以剖析系統或者系統的一部分的更多細節,以檢視系統的工作情況。如果你需要更高的效能和已經出現了問題,你甚至可能要剖析mysql內部。雖然這可能不是你的工作(這是mysql開發人員的工作?),但是它能幫助你避免由系統引起的問題。你可能不想解決它,但是至少你設計應用的時候避免一些弱點。

下面的一些工具可能用的到:

oprofile

oprofile (是個對於linux的系統剖析工具。它包括了乙個核心的驅動以及乙個後台程式用於收集示例資料,以及許多任務具幫你分析剖析的資料。它剖析了所有的資料,包括了中斷的操作,核心,核心模組,應用,以及共享庫。如果使用了debug元件編譯了乙個應用,oprofile能注釋**,但是這不是必須的。你可以使用oprofile而不必重新編譯。它相對來說是低消耗的,通常的範圍為幾個百分點。

gprof

gprof是個gnu的剖析器,你可以生成乙個可執行的用-pg引數編譯的程式的剖析。它能計算每次例行程式花費的總時間。gprof也能提供生成如下資訊的報表,呼叫函式的次數和執行時間,乙個呼叫的圖形,注釋原始碼的列表。

其他工具

還有許多其他的工具,包括了特殊的和專用的應用。這些包括了intel vtune,sun performance analyzer,dtrace以及其他系統。

作業系統 作業系統的概念

3 作業系統的目標和功能 作業系統用做擴充機器 計算機系統自上而下可區分為 從作業系統的角度 計算機系統的概述 在計算機中的cpu 記憶體 輸入 輸出裝置等硬體,提供了基本的計算機資源 應用程式等規定了按何種方式來使用這些資源來為使用者服務 作業系統控制和協調各使用者程式對硬體的分配和呼叫。所以作業...

作業系統 作業系統介面

介面表現為函式呼叫,由作業系統提供,連線作業系統和應用軟體。出於安全性考慮,應用程式不能直接在記憶體中任意訪問 將核心程式和使用者程式隔離 通過比較訪問資料段cpl和rpl的特權級和當前段dpl的特權級之間的關係 應用程式呼叫庫函式printf printf呼叫庫中的write函式 write將函式...

作業系統(作業系統引論)

方便性 方便使用者進行操作計算機 有效性提高系統資源的利用率 提高系統的吞吐量,加速程式的執行 可擴充性 方便地增添新的模組和功能,以及對原有的功能模組進行修改 開放性能夠遵循世界標準規範 os作為使用者和計算機硬體系統之間的介面 使用者能夠通過作業系統來使用計算機系統 os作為計算機資源的管理者 ...