63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
内存压力测试脚本 - 用于演示swap使用
|
||
该脚本会分配大量内存来触发系统使用swap
|
||
"""
|
||
|
||
import time
|
||
import sys
|
||
|
||
def memory_stress_test():
|
||
"""分配内存来触发swap使用"""
|
||
print("开始内存压力测试...")
|
||
print("当前内存和swap使用情况:")
|
||
|
||
# 显示当前内存状态
|
||
with open('/proc/meminfo', 'r') as f:
|
||
meminfo = f.read()
|
||
for line in meminfo.split('\n')[:6]:
|
||
if line.strip():
|
||
print(f" {line}")
|
||
|
||
# 分配内存列表
|
||
memory_blocks = []
|
||
block_size = 50 * 1024 * 1024 # 50MB per block
|
||
|
||
try:
|
||
for i in range(20): # 尝试分配总共约1GB
|
||
print(f"\n分配第 {i+1} 个内存块 (50MB)...")
|
||
# 分配50MB的内存块
|
||
block = bytearray(block_size)
|
||
# 写入一些数据确保内存真正分配
|
||
for j in range(0, block_size, 1024):
|
||
block[j] = j % 256
|
||
memory_blocks.append(block)
|
||
|
||
# 每分配5个块后检查内存状态
|
||
if (i + 1) % 5 == 0:
|
||
print(f"\n已分配 {(i+1)*50}MB,当前内存状态:")
|
||
time.sleep(2) # 等待系统调整
|
||
|
||
except MemoryError:
|
||
print("\n内存分配失败,已达到系统限制")
|
||
except KeyboardInterrupt:
|
||
print("\n测试被用户中断")
|
||
|
||
print(f"\n测试完成,共分配了 {len(memory_blocks)*50}MB 内存")
|
||
print("等待5秒后释放内存...")
|
||
time.sleep(5)
|
||
|
||
# 释放内存
|
||
memory_blocks.clear()
|
||
print("内存已释放")
|
||
|
||
print("\n测试后的内存状态:")
|
||
with open('/proc/meminfo', 'r') as f:
|
||
meminfo = f.read()
|
||
for line in meminfo.split('\n')[:6]:
|
||
if line.strip():
|
||
print(f" {line}")
|
||
|
||
if __name__ == "__main__":
|
||
memory_stress_test()
|