1. 程式人生 > >Erlang監測系統CPU、記憶體、磁碟

Erlang監測系統CPU、記憶體、磁碟

os_mon

Erlang的os_mon服務中提供了一些用於監測系統資訊的服務
cpu_sup:監測CPU負載和使用率(Unix)
disksup:監測磁碟(Unix、Windows)
memsup:監測記憶體(Unix、Windows、VxWorks)
os_sup:監測系統日誌(Solaris、Windows)

使用os_mon進行監測先必須啟動監測服務application:start(os_mon) ,因為os_mon服務依賴於sasl服務,先必須啟

動sasl服務,application:start(sasl) ,否則會返回{error,{not_started,sasl}} 錯誤。os_mon提供的四種監測服

務中預設會啟動三種服務:cpu_sup、disksup和memsup,如果需要自己設定啟動的監測服務,可以修改os_mon.app

檔案中的配置引數
start_cpu_sup = bool()
start_disksup = bool()
start_memsup = bool()
start_os_sup = bool()
等於true時啟動,等於false時不啟動。os_mon.app檔案在erlang的安裝目錄下../erl5.8.3/lib/os_mon-2.2.5

/ebin

cpu_sup

cpu監測在5.8.3版本中只能用於Solaris和Linux作業系統,負載值與Unix程序執行前在佇列中的排隊時間成正比,

因此值越大意味著負載越高,返回值除以256為rup和top命令中顯示的值。avg1/0,avg5/0avg15/0 函式計算負載,

util/0util/1 函式計算CPU使用率。在Linux系統中,必須保證/proc檔案目錄能被cpu_sup服務訪問,如果不能監

測服務會停止

模組中的函式列表
nprocs() -> UnixProcesses | {error, Reason}
返回UNIX程序數
avg1() -> SystemLoad | {error, Reason}
返回最後1分鐘系統的負載
avg5() -> SystemLoad | {error, Reason}
返回最後5分鐘系統的負載
avg15() -> SystemLoad | {error, Reason}
返回最後15分鐘系統的負載
util() -> CpuUtil | {error, Reason}
返回CPU使用率
util(Opts) -> UtilSpec | {error, Reason}
返回CPU使用率的詳細資訊

呼叫這些函式取CPU監測資料時,如果前後兩次呼叫,數值沒有變化時顯示為0,有點奇怪

disksup

disksup是一個用來監測磁碟空間的程序,適用於Unix和Windows系統。監測服務定期檢查磁碟,對於每個磁碟或分

區,在它使用超過一定的可用空間量,通過{{disk_almost_full,MountedOn},[]} 設定產生報警。在Unix下所有的

本地磁碟都會被監測,包括存在的交換分割槽。在WIN32下所有型別為“FIXED_DISK”邏輯驅動器都會被檢查。

配置監控間隔時間和閥值
disk_space_check_interval = int()>0
監測間隔時間,單位為分鐘,預設為30分鐘。
disk_almost_full_threshold = float()
監測閥值,磁碟使用率達到多少時產生告警,預設為80,單位是百分比。

模組中的函式列表


get_disk_data() -> [DiskData]
返回最後一次磁碟檢查結果
get_check_interval() -> MS
獲取監測間隔時間,單位是毫秒
set_check_interval(Minutes) -> ok
設定監測間隔時間,這個設定在下一次監測時生效,服務退出後,這個值會失效,重啟服務後使用預設值
get_almost_full_threshold() -> Percent
獲取監測閥值,為磁碟使用率
set_almost_full_threshold(Float) -> ok
設定監測閥值,服務重啟後,設定失效,使用預設值

memsup

memsup用來監控系統記憶體和各個程序記憶體的使用率,適用於Unix、Windows和VxWorks系統,定時監測記憶體,如果內

存使用超過系統分配的一定值,通過{system_memory_high_watermark, []} 設定產生告警。如果系統中任何Erlang

程序使用記憶體超過在總記憶體中的一定百分比,通過設定{process_memory_high_watermark,Pid} 產生告警。

配置監測間隔時間和閥值
memory_check_interval = int()>0
以分鐘為刻度,預設為1分鐘
system_memory_high_watermark = float()
記憶體使用閥值,預設為80,單位是百分比
process_memory_high_watermark = float()
單個Erlang程序使用閥值,預設為5,單位是百分比
memsup_helper_timeout = int()>0
等待監測結果的超時時間,預設為30秒
memsup_system_only = bool()
設定是否只監控系統記憶體使用率還是同時監測Erlang程序記憶體使用率,預設為false

模組中的函式列表
get_memory_data() -> {Total,Allocated,Worst}
獲取系統總記憶體,使用記憶體,每個Erlang程序的使用記憶體
get_system_memory_data() -> MemDataList
獲取系統記憶體使用的詳細資訊
get_os_wordsize() -> Wordsize
獲取作業系統的位數
get_check_interval() -> MS
獲取監測間隔時間,單位毫秒
set_check_interval(Minutes) -> ok
設定監測間隔時間,單位分鐘
get_procmem_high_watermark() -> int()
獲取每一程序記憶體使用告警閥值
set_procmem_high_watermark(Float) -> ok
設定每一程序記憶體告警閥值
get_sysmem_high_watermark() -> int()
獲取系統記憶體使用閥值
set_sysmem_high_watermark(Float) -> ok
設定系統記憶體使用閥值
get_helper_timeout() -> Seconds
獲取監測資料返回等待時間
set_helper_timeout(Seconds) -> ok
設定監測資料返回等待時間