python模拟资源消耗脚本
  fsRA5BavLkMu 2023年11月02日 93 0

想再windows写一个模拟内存,硬盘资源消耗的脚本,发现还是用python编写最好

思路

  • 消耗可用内存的70%
  • 消耗当前硬盘剩余空间的70%,生成一个文件
  • 增加基本逻辑判断,一旦内存消耗过大,硬盘占用过多就终止脚本
  • 执行15分钟
  • 每天01:00执行
import os 
import psutil
import sys
import logging
import time
#占用内存``
#占用硬盘

#配置日志
abspath=os.path.abspath(sys.argv[0])
current_path=os.path.dirname(abspath)
logging.basicConfig(filename=current_path+'/info.log',encoding='utf-8',level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')
file_path = os.path.dirname(abspath)+"/tmp_file.txt"  # 指定文件路径和文件名

def MemCost(percent:float)->None:
    CurrentMem=psutil.virtual_memory().available
    CostMem=(CurrentMem*percent)/(1024*1024)
    try: #内存占用
        #s = ' ' * (int(CostMem) * 1024 * 1024)
        ' ' * (int(CostMem) * 1024 * 1024)
        '*' * (int(CostMem) * 1024 * 1024)
        '#' * (int(CostMem) * 1024 * 1024)
        '@' * (int(CostMem) * 1024 * 1024)
        '!' * (int(CostMem) * 1024 * 1024)
        #logging.info("计划消耗内存:%s,当前剩余内存:%s",str("{:.2f}".format(CostMem)+"GB"),str("{:.2f}".format(CurrentMem/(1024*1024*1024)))+"GB")
    except MemoryError:
        logging.error("剩余内存:%s不足,内存有溢出....",CurrentMem)
    


def DiskCost(percent:float)->None:

    # 获取所有磁盘信息
    disk_partitions = psutil.disk_partitions()
    # 找到第二块硬盘
    second_disk = disk_partitions[1].device
    # 获取第二块硬盘的大小(以字节为单位)
    disk_size = psutil.disk_usage(second_disk).total
    #获取第二块硬盘的剩余空间
    disk_free=psutil.disk_usage(second_disk).free
    # 计算创建文件的大小(80%)
    file_size = int(disk_free*percent)
    # 创建一个指定大小的文件
    #剩余磁盘空间足够
    if disk_free/disk_size >= percent:
            with open(file_path, 'wb') as f:
                f.seek(file_size - 1)
                f.write(b'\0')
    else:
        logging.error("第二块磁盘剩余空间不足,不再创建文件,当前第二块磁盘剩余空间:%s",str("{:.2f}".format((disk_free)/(1024*1024*1024))+"GB"))
    return str("{:.2f}".format((file_size)/(1024*1024*1024))+"GB")
    
    
if __name__=='__main__':
    StartTime=time.time()
    CurrentMem1=str("{:.2f}".format((psutil.virtual_memory().available)/(1024*1024*1024)))+"GB"
    #目标剩余内存
    TargetMem=0.2*psutil.virtual_memory().total
     # 获取所有磁盘信息
    disk_partitions = psutil.disk_partitions()
    # 找到第二块硬盘
    second_disk = disk_partitions[1].device
    # 获取第二块硬盘的大小(以字节为单位)
    disk_free1=psutil.disk_usage(second_disk).free

    logging.info("程序开始执行,当前剩余内存:%s,当前第二块硬盘剩余空间:%s",CurrentMem1,str("{:.2f}".format((disk_free1)/(1024*1024*1024))+"GB"))
    if os.path.exists(file_path):
        logging.error("文件存在!:%s,不再执行文件生成!",file_path)
    else:
        logging.info("文件不存在!:%s,开始执行生成文件",file_path)
        file_size=DiskCost(0.7)
        logging.info("文件:%s创建创建完毕,大小为:%s",file_path,file_size)
    disk_free2=psutil.disk_usage(second_disk).free
    
    while True:
        CurrentTime=time.time()
        CostTime=CurrentTime-StartTime #计算经过时间
        #time.sleep(1)
        MemCost(0.7)
        AlivableMem=psutil.virtual_memory().available
        if AlivableMem < TargetMem:
            logging.info("终止程序,当前剩余内存不够,剩余内存为:%s",str("{:.2f}".format((AlivableMem)/(1024*1024*1024))+"GB"))
            break
        elif CostTime >= 15*60: #执行15分钟
            break
    CurrentMem2=str("{:.2f}".format((psutil.virtual_memory().available)/(1024*1024*1024)))+"GB"
    logging.info("程序执行完毕,花费时间:%s 秒,当前剩余内存:%s,当前第二块硬盘剩余空间为:%s",str("{:.2f}".format(CostTime)),CurrentMem2,str("{:.2f}".format((disk_free2)/(1024*1024*1024))+"GB"))


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年11月28日   19   0   0 nginx文件名linux命令
  U9ElBp9F5cmM   2023年11月19日   22   0   0 文件系统linux文件名