一种基于Linux的CPU和内存使用率收集的方法

文档序号:6625920阅读:709来源:国知局
一种基于Linux的CPU和内存使用率收集的方法
【专利摘要】本发明公开了一种基于Linux的CPU和内存使用率收集的方法,所述方法首先收集CPU或内存的信息,然后根据所收集的信息,通过公式分别计算出CPU或内存的使用率,其中CPU的使用率为:用执行用户系统状态的时间除以总的时间,内存使用率为:1-空闲使用率。本发明具有平均可控采样,科学计算,多路支持以及快速多台同时部署等特点。
【专利说明】—种基于Linux的CPU和内存使用率收集的方法

【技术领域】
[0001]本发明涉及计算机【技术领域】,具体涉及一种基于Linux的CPU和内存使用率收集的方法,应用于服务器日常巡检工作中,实现服务器运行状态的自动收集、计算工作。

【背景技术】
[0002]服务器巡检能够及时发现服务器的隐患,便于改善和优化服务器的性能。在巡检过程中服务人员需要分别收集服务器系统的CPU使用率,内存使用率,磁盘使用率信息,通过这些信息进行服务器系统的健康状态评估,该评估结果帮助服务器维护人员实时获得当前服务器的运行情况,并针对可能出现的CPU占用率过大,磁盘即将写满等问题及时做出处理。
[0003]随着云计算、大数据的普及和应用,用户对服务器的稳定性、可靠性的要求和平均无故障运行时间(MTBF)要求越来越高,并且随着数据膨胀带来的服务器数量的激增,传统的方法只能每次一台进行系统状态的查看,并且只能通过人为估计的方法来获得某一时间点的CPU使用率和内存使用率。如何快速,准确的获得大量服务器的运行状态,是摆在所有服务器维护人员面前的难题。


【发明内容】

[0004]本发明要解决的技术问题是:由于大多数以Linux为操作系统的服务器是不安装图形界面的,只能通过复杂的指令进行服务器当前数据的收集,目前的收集工作主要有两个问题:
1.收集工作往往是系统在某个时间点的运行状态,无法反映出系统在某一阶段的平均运行状态。
[0005]2.Linux系统中的CPU使用率以及内存使用率是通过相应的公式进行计算获得,现场很难通过计算来获得准确的数据。
[0006]为了避免这种情况的出现,简化维护成本,本申请提出了一种基于Linux的CPU和内存使用率收集的方法。通过自动脚本的运行,可以准确的或者系统在某一时间段内的CPU使用率和内存使用率的平均值,客观且全面的反映系统的当前状态。具有平均可控采样,科学计算,多路支持以及快速多台同时部署等特点。
[0007]本发明所采用的技术方案为:
一种基于Linux的CPU和内存使用率收集的方法,所述方法首先收集CPU或内存的信息,然后根据所收集的信息,通过公式分别计算出CPU或内存的使用率,其中CPU的使用率为:用执行用户系统状态的时间除以总的时间,内存使用率为:1_空闲使用率。
[0008]所述CPU使用率收集方法包括步骤如下:
I)获得CPU信息,Linux中CPU信息存放在/proc/stat文件中,包括参数如下:user:从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies),不包含nice 值为负进程,I jiffies=0.01 秒; nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies);
system:从系统启动开始累计到当前时刻,核心时间(单位:jiffies);idle:从系统启动开始累计到当前时刻,除硬盘1等待时间以外其它等待时间(单位:jiffies);
1wait:从系统启动开始累计到当前时刻,硬盘1等待时间(单位:jiffies); irq:从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies); softirq:从系统启动开始累计到当前时刻,软中断时间(单位:jiffies);
其中每一个参数,都表示一个CPU的当前状态;
2)计算CPU使用率,在Linux的内核中,有一个全局变量:jiffies,jiffies代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是I/HZο Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个CPU时间片,jiffies都要加I。CPU的利用率就是用执行用户系统状态的Jiffies除以总的jiffies来表示。
[0009]CPU计算方法:
CPUTOTAL=user+system+nice+idle+1wait+irq+softirq
SYS_IDLE=idle
CPU_USAGE=(SYS_IDLE2-SYS_IDLE1)/(CPU_T0TAL2-CPU_T0TALI)*100%
所述内存使用率收集方法包括步骤如下:
I)获得内存信息,Linux内存信息存放在/proc/meminfo中,包括参数:
MemTotal:所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小);
MemFree:LowFree与HighFree的总和,被系统留着未使用的内存;
Buffers:用来给文件做缓冲大小;
Cached:被高速缓冲存储器(cache memory)用的内存的大小;
为求的机器在一段时间内的平均内存使用率,这里在10秒内每秒进行一次内存采样。
[0010]2)计算内存使用率,空闲内存计算方法:当Cached大于MemTotal时,空闲内存MEM_FREE 为 MemFree,其余情况下,MEM_FREE = MemFree + Cached + Buffers,则内存使用率 MEM_USAGE = 1- MEM_FREE / MemTotal
程序代码:
If ( Cached > MemTotal )
MEM_FREE = MemFree
Else
MEM_FREE = MemFree + Cached + Buffers
MEM_USAGE = 1- MEM_FREE / MemTotal
在所述收集过程开始的准备工作中,将上述编写的程序脚本拷到某目录下,这个目录就是后续收集到的信息文件所在目录,得到需要的信息就可以直接到此目录查看,本发明的易用性得以体现。
[0011]所述程序能够自动识别到当前服务器的CPU数量,并且能够对每个CPU进行单独信息收集。通过设置CPUTestTime参数来定义CPU使用率采样次数,采样越多数据反映的越准确,但所占用的事件也越长。
[0012]CPU使用率计算代码如下: for ((m=0; m〈$CPU—NUM; m++)) do {
temp—row=$m+2
unset AVE—Disp—SYS—Rate
echo -n “ CPU$m Testing.”
for ((j+0;j<$CPUTestTime;j++))
do
{
temp—row—p=,,$ {temp—row} p”
CPULOG—1=$(cat /proc/stat | grep ;cpu,| sed - n $temp_row_p | awk ; {print$2” “$3” “$4” “$5” “$6” “$7” “$8”},)
SYS—IDLE—1=$(echo $CPUL0G_1 | awk ‘{print $4},)
Total—l=$echo $CPUL0G_1 | awk “ {print $l+$2+$3+$4+$5+$6+$7},)
for ((n=0;n<x;n++))
do
echo - n ”
sleep I
done
CPULOG—2=$ (cat /proc/stat | grep ;cpu,| sed - n $temp_row_p | awk ; {print$2” “$3” “$4” “$5” “$6” “$7” “$8”},)
SYS—IDLE—2=$(echo $CPUL0G_2 | awk ‘{print $4},)
Total-2=$ (echo $CPUL0G_2 | awk ‘{print $l+$2+$3+$4+$5+$6+$7}’)
SYS—IDLE=’ expr $SYS—IDLE—2 - $SYS—IDLE—Γ
Total=, expr $Total—2 - $Total—I,
SYS—USAGE=’ expr $SYS—IDLE/$Total*100 be -Γ
SYS—Rate=, expr 100-$SYS—USAGE | be -1,
Disp—SYS—Rate=/expr “scale+3; $SYS—Rate/1” | be,if [ ! $AVE—Disp—SYS—Rate ]; thenAVE—Disp—SYS—Rate=$Disp—SYS—Rate
eles
AVE—Disp—SYS—Rate=, expr “scale=3;$ AVE—Disp—SYS—Rate+$Disp—SYS—Rate”
I be,fi
}
done
echo “Finish!”
AVE—Disp—SYS—Rate=, expr “scale=3; $AVE—Disp—SYS—Rate/$CPUTestTime” | be,
echo - e “\033[32m CPU$m Usage: $ AVE—Disp—SYS—Rate% \033[0m”
echo “CPU$m Usage: $AVE—Disp—SYS—Rate% “?$fileName
}
done
内存的测试次数可以通过MEMTestTime进行控制,通过定制测试次数满足用户具体的应用要求。内存大小自动转化为GB单位,方便观察,所述内存计算代码:for ((i=0; i〈$MENTestTime; i++))do
{
declare -1 templ=$MEMTestTime_lif [ $1- eq $tempI ]; thenecho “.Finish!”
else
echo - n “.,,
fi
declare -1 CMDMEMTotal=,cat /proc/meminfo | grep “MemTotal” | cut - f2,3-d:1 sed - n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$八1/p,,;
SUMMENTotal=${{$SUMMENTotal+$CMDMEMTotal}};
declare -1 CMDMEMFree=’ cat /proc/meminfo | grep “MemFree” | cut - f2,3-d:1 sed - n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$八1/p,,;
SUMMEMFree=${{$SUMMENFree+$CMDMEMFree}};
declare -1 CMDMEMCached= ^ cat /proc/meminfo | grep - w “Cached” | cut-f2,3 -d: |sed -n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$Al/p,,;
SUMMENCached=${{$SUMMENCached+$CMDMEMCached}};
declare -1 CMDMENBuffers=’ cat /proc/meminfo | grep -w “Buffers” | cut-f2,3 -d: |sed -n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$Al/p,,;
SUMMENBuffers=${{$SUMMENBuffers+$CMDMEMBuffers}};
sleep I;
}
done
CMDMEMTotal=$SUMMENTotal/$MEMTestTime
CMDMEMFree=$SUMMENFree/$MEMTestTime
CMDMEMTCached=$SUMMENCached/$MEMTestTime CMDMEMBuffers=$SUMMENBuffers/$MEMTestTime
declare _i MEMFree
declare -1 MEMTotaI=$CMDMEMTotaI
if { $CMDMEMCached - gt $CMDMEMTotal }; then
MEMFree=$CMDMEMFree
else
MEMFree=$CMDMEMFree+$CMDMEMBuffers+$CMDMEMCached
fi
temp3=, expr $MEMFree/$MEMTotal*100 | be -1,
temp4=, expr 100-$temp3 | be,
MEMUSE=^ expr “scale=3; $temp4/l” | be -1,
temp5=’ expr “scale=l; $MEMTotal/1024/1024” | be -1’
temp6=, expr “scale=l; $MEMFree/1024/1024” | be -1,
echo - e “\033[36m Total memory: $MEMTotal kB ( $temp5 GB ) \033[0m”
echo - e “\033[36m Free memory: $MEMFree kB ( $temp6 GB ) \033[0m”
echo - e “\033[36m Memory usage: $MEMUSE% \033[0m”
echo “Total memory: $MEMTotal kB ( $temp5 GB ) ” >>$fileName
echo “Free memory: $MEMFree kB ( $temp6 GB ) ” >>$fileName
echo “Memory usage: $MEMUSE%” >>$fileName
本发明的有益效果为:本发明提出的基于Linux操作系统的CPU使用率以及内存使用率实现方法能够很好的解决以上提出的问题:
1.CPU使用率以及内存使用率的釆集工作基于多个时间点,可自行设置釆样点跨度时间,客观的获得平均使用状态。
[0013]2.CPU使用率以及内存使用率釆用科学的计算方法,通过在上述平均釆样的基础上进行计算。能够客观、准确的反映出系统的运行状态。
[0014]3.由于釆用脚本的设计方式,可以快速部署到多台机器上,通过指令同时进行数据釆样,计算,保存,收集工作,极大的减轻了维护人员巡检工作,无人值守,自动运行。
[0015]4.釆用动态显示的方法,使收集过程清晰明了的展现在使用者面前;并且自动将计算过程和计算数据保存在当前目录下,方便使用者统一收集。
[0016]5.支持多路服务器的CPU使用率收集,由于现在服务器上通常会部署多个CPU,该方法可以收集多CPU在同一时间段内的平均使用状态,并分别分析,显示并保存使用信息。

【具体实施方式】
[0017]下面通过【具体实施方式】,对本发明进一步说明:
CPU使用率计算代码如下:
for ((m=0; m〈$CPU—NUM; m++))
do
{
temp—row=$m+2
unset AVE—Disp—SYS—Rate
echo -n “ CPU$m Testing.”
for ((j+0;j<$CPUTestTime;j++))
do
{
temp—row—p=,,$ {temp—row} p”
CPULOG—1=$(cat /proc/stat | grep ;cpu,| sed - n $temp_row_p | awk ; {print$2” “$3” “$4” “$5” “$6” “$7” “$8”},)
SYS—IDLE—1=$(echo $CPUL0G_1 | awk ‘{print $4},)
Total—l=$echo $CPUL0G_1 | awk “ {print $l+$2+$3+$4+$5+$6+$7},)
for ((n=0;n<x;n++))
do
echo - n ”
sleep I
done
CPULOG—2=$(cat /proc/stat | grep ;cpu,| sed - n $temp_row_p | awk ; {print$2” “$3” “$4” “$5” “$6” “$7” “$8”},)
SYS—IDLE—2=$(echo $CPUL0G_2 | awk ‘{print $4},)
Total-2=$ (echo $CPUL0G_2 | awk ‘{print $l+$2+$3+$4+$5+$6+$7}’)
SYS—IDLE=’ expr $SYS—IDLE—2 - $SYS—IDLE—Γ
Total=, expr $Total—2 - $Total—I,
SYS—USAGE=’ expr $SYS—IDLE/$Total*100 be -Γ
SYS—Rate=, expr 100-$SYS—USAGE | be -1,
Disp—SYS—Rate=/expr “scale+3; $SYS—Rate/1” | be,if [ ! $AVE—Disp—SYS—Rate ]; thenAVE—Disp—SYS—Rate=$Disp—SYS—Rate
eles
AVE—Disp—SYS—Rate=, expr “scale=3;$ AVE—Disp—SYS—Rate+$Disp—SYS—Rate”
I be,fi
}
done
echo “Finish!”
AVE—Disp—SYS—Rate=, expr “scale=3; $AVE—Disp—SYS—Rate/$CPUTestTime” | be,
echo - e “\033[32m CPU$m Usage: $ AVE—Disp—SYS—Rate% \033[0m”
echo “CPU$m Usage: $AVE—Disp—SYS—Rate% “?$fileName
}
done
内存计算代码:
for ((i=0; i〈$MENTestTime; i++))
do
{
declare -1 templ=$MEMTestTime_l
if [ $1- eq $tempI ]; then
echo “.Finish!”
else
echo - n “.,,
fi
declare -1 CMDMEMTotal=,cat /proc/meminfo | grep “MemTotal” | cut - f2,3-d:1 sed - n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$八1/p,,;
SUMMENTotal=${{$SUMMENTotal+$CMDMEMTotal}};
declare -1 CMDMEMFree=’ cat /proc/meminfo | grep “MemFree” | cut - f2,3-d:1 sed - n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$八1/p,,;
SUMMEMFree=${{$SUMMENFree+$CMDMEMFree}};
declare -1 CMDMEMCached= ^ cat /proc/meminfo | grep - w “Cached” | cut-f2,3 -d: |sed -n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$Al/p,,;
SUMMENCached=${{$SUMMENCached+$CMDMEMCached}};
declare -1 CMDMENBuffers=’ cat /proc/meminfo | grep -w “Buffers” | cut-f2,3 -d: |sed -n ‘s/.* \ ([0—9] \ {1,\} \) kB.*$Al/p,,;
SUMMENBuffers=${{$SUMMENBuffers+$CMDMEMBuffers}};
sleep I;
}
done
CMDMEMTotal=$SUMMENTotal/$MEMTestTime
CMDMEMFree=$SUMMENFree/$MEMTestTime
CMDMEMTCached=$SUMMENCached/$MEMTestTime CMDMEMBuffers=$SUMMENBuffers/$MEMTestTime
declare _i MEMFree
declare -1 MEMTotal=$CMDMEMTotal
if { $CMDMEMCached - gt $CMDMEMTotal }; then
MEMFree=$CMDMEMFree
else
MEMFree=$CMDMEMFree+$CMDMEMBuffers+$CMDMEMCached
fi
temp3=, expr $MEMFree/$MEMTotal*100 | be -1,
temp4=, expr 100-$temp3 | be,
MEMUSE=^ expr “scale=3; $temp4/l” | be -1,
temp5=’ expr “scale=l; $MEMTotal/1024/1024” | be -1’
temp6=, expr “scale=l; $MEMFree/1024/1024” | be -1,
echo - e “\033[36m Total memory: $MEMTotal kB ( $temp5 GB ) \033[0m”
echo - e “\033[36m Free memory: $MEMFree kB ( $temp6 GB ) \033[0m”
echo - e “\033[36m Memory usage: $MEMUSE% \033[0m”echo “Total memory: $MEMTotal kB ( $temp5 GB ) ” >>$fileNameecho “Free memory: $MEMFree kB ( $temp6 GB ) ” >>$fileNameecho “Memory usage: $MEMUSE%” >>$fileName0
【权利要求】
1.一种基于Linux的CPU和内存使用率收集的方法,其特征在于:所述方法首先收集CPU或内存的信息,然后根据所收集的信息,通过公式分别计算出CPU或内存的使用率,其中CPU的使用率为:用执行用户系统状态的时间除以总的时间,内存使用率为:1_空闲使用率。
2.根据权利要求1所述的一种基于Linux的CPU和内存使用率收集的方法,其特征在于,所述CPU使用率收集方法包括步骤如下: 1)获得CPU信息,Linux中CPU信息存放在/proc/stat文件中,包括参数如下: user:从系统启动开始累计到当前时刻,用户态的CPU时间,不包含nice值为负进程; nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间; system:从系统启动开始累计到当前时刻,核心时间(; idle:从系统启动开始累计到当前时刻,除硬盘1等待时间以外其它等待时间; 1wait:从系统启动开始累计到当前时刻,硬盘1等待时间; irq:从系统启动开始累计到当前时刻,硬中断时间; softirq:从系统启动开始累计到当前时刻,软中断时间; 其中每一个参数,都表示一个CPU的当前状态; 2)计算CPU使用率, CPU计算方法:
CPUTOTAL=user+system+nice+idle+1wait+irq+softirq
SYS_IDLE=idle
CPU_USAGE=(SYS_IDLE2-SYS_IDLE1)/(CPU_T0TAL2-CPU_T0TALI)*100%
o
3.根据权利要求1所述的一种基于Linux的CPU和内存使用率收集的方法,其特征在于,所述内存使用率收集方法包括步骤如下: 1)获得内存信息,Linux内存信息存放在/proc/meminfo中,包括参数: MemTotal:所有可用RAM大小; MemFree:LowFree与HighFree的总和,被系统留着未使用的内存; Buffers:用来给文件做缓冲大小; Cached:被高速缓冲存储器用的内存的大小; 2)计算内存使用率,其中: 空闲内存计算方法: 当 Cached 大于 MemTotal 时,空闲内存 MEM_FREE 为 MemFree, 其余情况下,MEM_FREE = MemFree + Cached + Buffers, 则内存使用率 MEM_USAGE = 1- MEM_FREE / MemTotal。
4.根据权利要求1、2或3任一所述的一种基于Linux的CPU和内存使用率收集的方法,其特征在于:在所述收集过程开始的准备工作中,将根据权利要求2或3编写的程序脚本拷到某目录下,这个目录就是后续收集到的信息文件所在目录,得到需要的信息就可以直接到此目录查看。
5.根据权利要求2所述的一种基于Linux的CPU和内存使用率收集的方法,其特征在于:所述程序通过设置CPUTestTime参数能够自动识别到当前服务器的CPU数量,并且能够对每个CPU进行单独信息收集。
6.根据权利要求3任一所述的一种基于Linux的CPU和内存使用率收集的方法,其特征在于:内存的测试次数可以通过设置MEMTestTime进行控制,通过定制测试次数满足用户具体的应用要求。
【文档编号】G06F11/34GK104239193SQ201410448195
【公开日】2014年12月24日 申请日期:2014年9月4日 优先权日:2014年9月4日
【发明者】唐珂, 任华进 申请人:浪潮电子信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1