Linux系统性能分析

本文主要介绍了如何分析Linux系统的性能,包括查看处理器单元数量、平均负载,以及使用stress工具进行压力测试。stress是一个用于测试系统高负荷运行的工具,可以产生CPU和IO进程。当Linux执行程序被killed时,可能是由于内存不足,可通过系统日志找出原因。此外,还提到了Python使用psutil库测量代码执行的CPU利用率。

查看系统中的处理器单元数量

  • nproc
    在这里插入图片描述
  • lscpu
    在这里插入图片描述
  • grep 'model name' /proc/cpuinfo | wc -l【在/proc/cpuinfo中查找model name字符串并统计个数】
    在这里插入图片描述

查看平均负载

  • top【具体的值会动态变化】
    在这里插入图片描述
  • uptime
    在这里插入图片描述
    解析:load average:分别记录了过去一分钟、五分钟、以及十五分钟的系统平均负载

stress工具的使用

简介

stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这些设备运行的用户。

安装

  1. 下载安装包:下载地址为https://fossies.org/linux/privat/stress-1.0.4.tar.gz/
  2. 将stress-1.0.4.tar.gz复制到“/usr/local/src/”目录下
  3. cd /usr/local/src
  4. tar -xzpvf stress-1.0.4.tar.gz
  5. cd stress-1.0.4
  6. ./configure
  7. make
  8. make check
  9. make install
  10. make clean

使用

产生3个cpu进程

每个进程都反复不停的计算由rand ()产生随机数的平方根
stress -c 13

产生4个io进程

每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上
stress -i 4

产生3个cpu进程4个io进程2分钟后停止运行

stress -c 3 -i 4 --verbose --timeout 2m

产生2个10M的malloc()/free()进程,并且vm进程中malloc的字节不释放

stress --vm 2 --vm-bytes 10000000 --vm-keep --verbose

测试硬盘

通过mkstemp()生成800K大小的文件写入硬盘,对CPU、内存的使用要求很低
stress -d 1 --hdd-noclean --hdd-bytes 800k

Linux执行程序出现killed

在这里插入图片描述
原因分析:整个系统的内存已经不足,如果不杀死进程的话,就会导致系统的崩溃。Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。如下图,MEM已经到83.7%了。
在这里插入图片描述
解决办法:

  1. 通过系统日志信息查看Killed的进程:dmesg | grep "Out of memory"
    在这里插入图片描述
  2. 看看程序是不是存在问题,优化程序
  3. 加内存

Python测量某段代码执行的利用率

参考链接:https://blog.csdn.net/Hubz131/article/details/94414013
这个问题困扰了我很久,期间一直在百度linux命令,在python中通过os.popen()来调用top,sar等命令,试了好多种方法都不准确,最终找到psutil这个工具,不得不敢开Python的强大!

import os
import psutil
import time
_timer = getattr(time, 'monotonic', time.time)
num_cpus = psutil.cpu_count() or 1
def timer():
    return _timer() * num_cpus
def GetProcessCPU_Pre(id):
    p = psutil.Process(id)
    pt = p.cpu_times()
    st1,pt1_0,pt1_1 = timer(),pt.user,pt.system   # new
	# ...这里是你要测量的代码块...
	pt = p.cpu_times()
    st0,pt0_0,pt0_1 = pid_cpuinfo.get(id,(0,0,0)) # old
 
    delta_proc = (pt1_0 - pt0_0) + (pt1_1 - pt0_1)
    delta_time = st1 - st0
    try:
        cpus_percent = ((delta_proc / delta_time) * 100)
    except:
        cpus_percent = 0.0
    return "{:.2f}".format(cpus_percent)

if __name__ == '__main__':
	pid = os.popen("pidof 进程描述信息【比如python3】").read().split(' ')[0]
	GetProcessCPU_Pre(pid)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值