linux下获取CPU利用率和内存使用情况

参考网址:

http://www.linuxdiyf.com/viewarticle.php?id=109486

http://hi.baidu.com/paobeilvcha/blog/item/9b886d6d7d82b7fd43169482.html


一、获取CPU利用率信息

一般来说对于需要大量cpu计算的进程,当前端压力越大时,CPU利用率越高。但对于I/O网络密集型的进程,即使请求很多,服务器的CPU也不一定很到,这时的服务瓶颈一般是在磁盘的I/O上。比较长见的就是,大文件频繁读写的cpu开销远小于小文件频繁读写的开销。因为在I/O吞吐量一定时,小文件的读写更加频繁,需要更多的cpu来处理I/O的中断。

在Linux/Unix下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。平时所说的CPU利用率是指:CPU执行非系统空闲进程的时间 / CPU总的执行时间。

在Linux的内核中,有一个全局变量:Jiffies。 Jiffies代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是1/HZ。Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个CPU时间片,Jiffies都要加1。 CPU的利用率就是用执行用户态+系统态的Jiffies除以总的Jifffies来表示。

在Linux系统中,可以用/proc/stat文件来计算cpu的利用率(详细的解释可参考:http://www.linuxhowtos.org/System/procstat.htm)。这个文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。


示例:

linux-rd4x:~> cat /proc/stat
cpu  165297 50 5283 6021565 3674 1408 1872 0 0
cpu0 52247 43 2986 3060039 2755 918 1107 0 0
cpu1 113050 7 2297 2961526 918 489 764 0 0
intr 6617373 137 8 0 1 1 0 5 0 1 0 0 0 105 0 0 9889 0 17550 0 765780 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 5169085
btime 1328833557
processes 17639
procs_running 1
procs_blocked 0
softirq 5696593 0 3768625 166739 765254 26218 2 466192 5695 497868


输出解释
CPU                            CPU0、CPU1

cpu 0-4的和               分别对应多核cpu的1和2


参数 解释
user (165297) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice (50) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
system (5283) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
idle (6021565) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
iowait (3674) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq (1408) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
softirq (1872) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

CPU时间=user+system+nice+idle(+iowait+irq+softirq)——后面三个参数信息在部分版本中可能没有

“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。


cpu利用率的计算方式(需要取两个不同时刻的参数信息):

方式一:

cpu usage=(idle2-idle1)/(cpu2-cpu1)*100

方式二:
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(cpu_2 - cpu_1)*100

或:

cpu usage=[(user_2 +sys_2) - (user_1 + sys_1)]/(cpu_2 - cpu_1)*100

PS:

1.两次的CPU采样需要隔一段时间;

2.需要注意分母若为0的情况,可理解为cpu利用率为0;


二、获取内存相关信息

linux-rd4x:~> free
             total       used       free     shared    buffers     cached
Mem:        502204     382416     119788          0      51300     280304
-/+ buffers/cache:      50812     451392
Swap:      1550232          0    1550232

数值解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。


区别:

第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。

这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
451392=119788+51300+280304


从/proc/meminfo也可以查看内存信息,计算方式与上述相同:

linux-rd4x:~> cat /proc/meminfo
MemTotal:         502204 kB
MemFree:          120144 kB
Buffers:           50988 kB
Cached:           260348 kB

SwapCached:            0 kB
Active:           122912 kB
Inactive:         222692 kB
Active(anon):      34452 kB
Inactive(anon):        0 kB
Active(file):      88460 kB
Inactive(file):   222692 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:         502204 kB
LowFree:          120144 kB
SwapTotal:       1550232 kB
SwapFree:        1550232 kB
........


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中,可以使用一些命令和脚本来指定CPU利用率为50%。一种方法是使用stress命令。stress是一个可以用来测试系统稳定性的工具,也可以用来模拟CPU负载。 首先,确保您的系统已经安装了stress工具。在终端中输入以下命令以安装stress: sudo apt-get install stress 安装完成后,可以使用以下命令来指定CPU利用率为50%: stress --cpu 1 --timeout 60 上述命令中,--cpu 1表示只使用1个CPU核心,--timeout 60表示持续运行60秒。这将导致系统的1个CPU核心的利用率保持在50%左右。 如果您希望系统的所有CPU核心都以50%的利用率运行,可以修改上述命令为: stress --cpu $(nproc) --timeout 60 上述命令中,$(nproc)将返回系统的CPU核心数量,并将其作为参数传递给--cpu选项,从而使用全部CPU核心。 运行以上命令后,系统的CPU利用率将接近50%。可以使用top命令或htop命令来查看系统CPU利用率是否已达到目标。当执行完设定的时间(60秒)后,stress命令会自动退出,CPU利用率将会恢复到正常水平。 需要注意的是,这只是一个简单的示例。更复杂的任务可以使用更多选项和参数来实现不同的CPU利用率目标。请确保根据具体需求进行适当的调整。 ### 回答2: 要实现Linux系统指定CPU利用率达到50%的脚本,可以使用stress工具结合任务调度工具来完成。 首先,安装stress工具。在终端中输入以下命令: ``` sudo apt-get install stress ``` 然后,创建一个脚本文件如"cpu.sh",并在终端中输入以下命令: ``` nano cpu.sh ``` 然后在cpu.sh文件中输入以下内容: ```bash #!/bin/bash stress --cpu 1 --timeout 30 ``` 这个脚本会使用stress工具模拟一个CPU负载,并持续运行30秒。 保存并退出cpu.sh文件(按Ctrl + X,然后按Y,最后按Enter)。 接下来,使用任务调度工具来调度这个脚本,以使得脚本定期执行并达到50%的CPU利用率。 在终端中输入以下命令来编辑cron表: ``` crontab -e ``` 然后,在打开的文本编辑器中将以下内容添加到文件的底部: ```bash * * * * * /path/to/cpu.sh ``` 请将"/path/to/cpu.sh"替换为实际的脚本文件路径。 保存并退出文本编辑器。 现在,每分钟脚本文件就会执行一次,模拟CPU负载,并持续运行30秒。根据系统和硬件的不同,这个脚本将尽量使得CPU利用率达到50%的水平。 ### 回答3: 在Linux上指定CPU利用率为50%的脚本可以使用stress命令来实现。stress命令是一个压力测试工具,它可以模拟CPU内存磁盘和网络等多种资源的负载。 以下是一个用于指定CPU利用率为50%的简单脚本: ```shell #!/bin/bash # 设置要测试的CPU核心数量 CORES=$(grep -c "^processor" /proc/cpuinfo) # 设置要实现的目标CPU利用率 TARGET_UTILIZATION=50 # 计算每个核心需要的线程数 THREADS=$(echo "scale=0; $CORES * $TARGET_UTILIZATION / 100" | bc) # 启动stress命令,限制CPU利用率 stress --cpu $THREADS --timeout 60s ``` 解释: - `CORES`变量获取当前计算机的CPU核心数量。 - `TARGET_UTILIZATION`变量指定目标CPU利用率为50%。 - `THREADS`变量根据目标利用率和核心数量计算出每个核心需要的线程数。这里使用bc命令进行小数运算。 - `stress`命令用于创建负载,`--cpu`参数指定创建CPU负载,`$THREADS`指定线程数,`--timeout`参数指定持续时间,这里设置为60秒。 可以在终端中将上述脚本保存到一个文件(例如script.sh),并使用以下命令运行它: ```shell chmod +x script.sh ./script.sh ``` 运行脚本后,每个CPU核心的利用率应该接近50%。可以根据需求修改目标利用率或持续时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值