记录机器CPU和内存使用情况的程序
郝伟 2021/02/27
为了记录目标机器的CPU和内存占用率,编写了以下代码,本段代码主要注意事项:
记录的数据格式为:time,cpu, mem_used, mem_free,如 1614391004, 2.2, 1.37, 0.11,其中时间为相对于1970.1.1的秒数,CPU的单位是百分比,内存是GB。程序每秒生成一条记录,长度为31字节,所以每天约为25M数据,每月75M,每年900M。
为了保证文件不至于太大,所以按天保存,每天的日志的文件名为 usage_yyyyMMdd.txt,如 usage_20210227.txt。
logs 目录。python cpu_mem_usage.py &,即可在后台运行。程序文件名称为:cpu_mem_usage.py,内容如下所示。
#encoding=utf-8 ''' 日期:2021/02/25 作者:郝伟 描述:获得CPU和内存使用情况 ''' import time, os import psutil # pip install psutil def get_info(): ''' Get information of cpu and memeory return format: time,cpu_usage,mem_used,mem_free ''' cpu=psutil.cpu_percent() mem = psutil.virtual_memory() mem_used = mem.used / 1073741824 mem_free = mem.free / 1073741824 return '{0},{1:5.1f},{2:5.2f},{3:5.2f}'.format(t0, cpu, mem_used, mem_free) def get_filename(): return './logs/usage_{0}.txt'.format(time.strftime("%Y%m%d", time.localtime())) print('dataformat: time, cpu_usage, mem_used, mem_free') filename=get_filename() logfile=open(filename, 'w', encoding='utf-8') t0=int(time.time()) t1=int(time.time()) while True: while t0==t1: time.sleep(0.1) t1 = int(time.time()) t0=t1 info=get_info() logfile.write(info+'\n') if t0 % 60 == 0: # 每分钟将缓冲中的数据写到文件中一次 logfile.flush() # 每天一个日志文件,文件名格式为 usage_yyyyMMdd.txt,如 usage_20210227.txt if filename != get_filename(): filename=get_filename() logfile.close() logfile=open(filename, 'w', encoding='utf-8') logfile.close() # 以下代码仅供参考 ''' print('ID\tTime(s)\tSpeed(MB/s)\tMemory(GB)') for i in range(1): t1=time.time() time.sleep(1) t2=time.time() t = t2 - t1 + 0.001 speed = 1 / t mem = psutil.Process(os.getpid()).memory_info().rss / 1024 ** 3 print(u'{0}\t{1:.2f}\t{2:.2f}\t{3:.4f}'.format(i + 1, t, speed, mem)) '''