想再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"))