"proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過proc得到系統的資訊,並可以改變核心的某些參數。"
這裡將介紹如何從/proc檔案系統中擷取與防火牆相關的一些績效參數,以及如何通過/proc檔案系統修改核心的相關配置。
1、從/proc檔案系統擷取相關的績效參數
cpu使用率: /proc/stat
記憶體使用量情況: /proc/meminfo
網路負載資訊: /proc/net/dev
相應的計算方法:(摘自:什麼是proc檔案系統,見參考資料)
(1) 處理器使用率
(2) 記憶體使用量率
(3) 流入流出資料包
(4) 整體網路負載
這些資料分別要從/proc/stat、/proc/net/dev、/proc/meminfo三個檔案中提取。如裡有問題或對要提取的資料不太清楚,可以使用man proc來查看proc檔案系統的線上手冊。
(1) 處理器使用率
這裡要從/proc/stat中提取四個資料:使用者模式(user)、低優先順序的使用者模式(nice)、核心模式(system)以及閒置處理器時間(idle)。它們均位於/proc/stat檔案的第一行。CPU的利用率使用如下公式來計算。
CPU利用率 = 100 *(user + nice + system)/(user + nice + system + idle)
c預言實現如下:
int get_cpu_usage(void)
{
int total;
int usage;
int user;
int nice;
int system;
int idle;
unsigned char cpu[8];
unsigned char text[256];
FILE *fp;
fp = fopen("/proc/stat", "r");
fread(text, 1, sizeof(text), fp);
if (strstr(text, "cpu"))
{
sscanf(text, "%s %d %d %d %d", cpu, &user, &nice, &system, &idle);
}
printf("%d %d %d %d/n", user, nice, system, idle);
fclose(fp);
total = (user + nice + system + idle);
usage = ((user + nice + system )*100)/total ;
return usage;
}
(2) 記憶體使用量率
這裡需要從/proc/meminfo檔案中提取兩個資料,當前記憶體的使用量(cmem)以及記憶體總量(amem)。
記憶體使用量百分比 = 100 * (cmem / umem)
(3)網路利用率
為了得到網路利用率的相關資料,需要從/proc/net/dev檔案中獲得兩個資料:從本機輸出的資料包數,流入原生資料包數。它們都位於這個檔案的第四行。
效能收集程式開始記錄下這兩個資料的初始值,以後每次獲得這個值後均減去這個初始值即為從叢集啟動開始從本節點通過的資料包。
利用上述資料計算出網路的平均負載,方法如下:
平均網路負載 = (輸出的資料包+流入的資料包) / 2
2. 通過/proc檔案系統調整相關的核心配置
允許ip轉寄 /proc/sys/net/ipv4/ip_forward
禁止ping /proc/sys/net/ipv4/icmp_echo_ignore_all
可以在命令列下直接往上述兩個“檔案”裡頭寫入"1"來實現相關配置,如果寫入"0"將取消相關配置。不過在系統重啟以後,這些配置將恢複預設設定,所以,如果想讓這些修改生效,可以把下面的配置直接寫入/etc/profile檔案,或者其他隨系統啟動而執行的程式檔案中。
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all