在服务器运维过程中,有很多公司会对服务器的资源使用率进行监测,发现使用率不高了,会对服务器降配。如果你是乙方,你可以尝试一下这种方法,脚本提升cpu与内存的使用率。如果你需要对服务器性能或者服务稳定性进行测试,也可以使用这种方法。

CPU使用率提升

现在的cpu性能都很高,普通的正弦余弦函数,没有作用。最好使用斐波那契数列,同时充分提供多核进行计算。

import multiprocessing
def fibonacci(n):
    """
    计算第n个斐波那契数列
    """
    if n <= 0:
        return []
    elif n == 1:
        return [0]
    elif n == 2:
        return [0, 1]
    else:
        fib_list = [0, 1]
        while len(fib_list) < n:
            new_num = fib_list[-1] + fib_list[-2]
            fib_list.append(new_num)
        return fib_list

def worker(num):
    """
    一个简单的工作函数,这里可以替换为你的计算密集型任务
    """
    print(f"Worker {num} is running")
    # 模拟工作
    for i in range(20000):
        array=fibonacci(8000)
        array2=fibonacci(4000)
        print(len(array), end="")
        print(len(array2))


def improve_cpu():
    # 获取CPU核心数
    num_cpus = multiprocessing.cpu_count()
    print(f"Using {num_cpus} CPUs")

    # 创建进程池
    pool = multiprocessing.Pool(processes=num_cpus)

    # 向进程池提交任务
    for i in range(num_cpus):
        pool.apply_async(worker, args=(i,))

    # 关闭进程池并等待所有任务完成
    pool.close()
    pool.join()
    print("CPU测试完成")

if __name__ == "__main__":
    improve_cpu()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.

内存使用率提升

内存使用率提升,可以通过构建大的bytearray来实现。
注意,

  1. 防止变量被回收
  2. 不要使用time.sleep来持续时间,占用内存会不生效
  3. 尽量不要百分百占用,会影响系统的其他业务
import psutil
import asyncio

async def wait_for_a_minute():
    print("开始等待2分钟....")
    await asyncio.sleep(120)
    print("已经等待了2分钟。")
    return "Done"

def improve_memory():
    total_memory = psutil.virtual_memory().total / 1024 ** 3
    print("总内存" + str(total_memory) + "GB")
    free_memory = psutil.virtual_memory().free / 1024 ** 3
    print("可用内存" + str(free_memory) + "GB")
    # 使用剩余内存60%
    use_size = int(psutil.virtual_memory().free * 6 / 10)
    print("预计使用" + str(use_size / 1024 ** 3) + "GB")
    print("开始内存测试")
    memory = bytearray(use_size)
    asyncio.run(wait_for_a_minute())
    print(len(memory))
    print("内存测试完成")
    
if __name__ == "__main__":
    improve_memory()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

编译部署

  1. 开发的脚本,可以通过pyinstaller编译为可执行文件。
pyinstaller --onefile main.py
  • 1.

注意,在windows上会被编译会exe,在centos会直接编译为可以执行文件。

  1. 在centos上执行的话,需要使用下面命令,对文件进行授权。
chmod 777 main
  • 1.
  1. 可以与定时任务结合,定时提升服务器的使用率。