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
設置監測數據返回等待時間

發佈了18 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章