• 内存压测神器:memtester深度指南


    1.前言

    本文接上篇烧脑神器cpuburn,继续介绍监控告警的资源场景构造。

    如何构造内存使用率过多的场景?

    有两个方法:

    1. 自己写代码弄个小工具,不断地去allocate_memory。

    2. 用现成的工具:比如马上要介绍这款内存测试工具:memtester

     

    2.简介

    项目地址http://pyropus.ca/software/memtester/

    简介:A userspace utility for testing the memory subsystem for faults. It's portable and should compile and work on any 32- or 64-bit Unix-like system. (Yes, even weird, proprietary Unices, and even Mac OS X.) For hardware developers, memtester can be told to test memory starting at a particular physical address as of memtester version 4.1.0.

    翻译:一款在用户空间下,用于测试内存正确性的实用工具,适用于大多数平台。可以在32位或64位的类Unix操作系统编译和运行(当然也包括MacOs)。这款工具主要面向硬件开发人员,从4.1.0版本开始,memtester可以指定起始物理内存地址进行测试。

    通过介绍可以得知这是一款测试内存正确性的工具,虽说的是适用于硬件工程师,但是我们也可以拿过来构造内存占用的场景。

     

    3.安装方式

    3.1 源码编译(推荐)

    #1.下载源码
    wget http://pyropus.ca/software/memtester/old-versions/memtester-4.3.0.tar.gz
    
    #2. 解压缩
    tar xzvf memtester-4.3.0.tar.gz
    
    #3. 编译
    sudo make
    
    #4. 安装
    sudo make install

    3.2 预编译好的二进制

    memtester存在于各Linux系统的软件安装包列表里面,可以自行用对应软件管理命令查找memtester,如下是相关Linux系统的memtester的package信息:

     Debian

     Ubuntu

     DAG packages for Fedora

     NetBSD ports

     MacPorts

     NetBSD

     Solaris/SunOS (sunfreeware.com)

    比如,Ubuntu下安装memtester

    sudo apt install -y memtester

    4. 帮助

    Usage: memtester [-p physaddrbase [-d device]] <mem>[B|K|M|G] [loops]

    参数解释

       -p PHYSADDR: 用于指定起始物理内存地址开始测试(16进制的地址格式),一般是硬件工程师用来测试内存映射的设备IO等场景。指定内存地址会覆盖对应地址的内存数据(这部分内存可能是系统或者其他应用在用的),从而导致crash。

       -d 默认使用/dev/mem,我们不用指定

       mem: 默认使用M(MB),可以指定B, K, M, or G(分别代表 bytes, kilobytes, megabytes, or gigabytes)

       loops:测试次数,默认无限次数执行下去

    5. 例子

    1)首先查看本机内存

    free -g,可以看到有16G

     

    2)分配10g内存用于memtest,循环十次

    memtester 10g 10

    文中打印了很多测试信息,可以看出来memtester对内存的逻辑操作进行了正确性验证。

     

    3) 查看实际内存使用情况

    输入: top ,然后按下m字母键。

    10/16≈62.5%,系统整体的内存使用率达到了70%,memtester使用了约64%左右。

     

    6.其他

    退出码

     0:正常退出

     x01:内存分配或者锁定失败

     x02:stuck Address测试失败

     x04:其他测试失败

    最佳实践

    •  在32位系统上运行memtester的话,memtester最多只能申请使用4GB内存。
    •  不要指定memtester测试内存大于系统的可用内存,如果超额申请过多内存,会明显影响其他进程,最终可能会被系统杀掉(OOM killer)(其实这么做根本无法启动memtester)
    •  尽量在root权限下执行memtester,以便让memtester能申请到指定的内存大小。

    博主:测试生财(一个不为996而996的测开码农)

    座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。

    内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。

    csdn:https://blog.csdn.net/ccgshigao

    博客园:https://www.cnblogs.com/qa-freeroad/

    51cto:https://blog.51cto.com/14900374

    微信公众号:测试生财(定期分享独家内容和资源)

     

     

     

  • 相关阅读:
    关于一些Spring MVC控制器的参数注解总结
    如何制作知识图谱
    关于本体的一些知识需要了解
    分享一些关于Lucene的心得
    java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    JAVA小游戏之两个物体碰撞产生的碰撞检测
    IT界程序员几大恶习能立即让你变穷,你有吗?
    JAVA图形界面常用知识点总会《代码分析》
    程序员解决问题的60个策略
    app微信支付-java服务端接口 支付-查询-退款
  • 原文地址:https://www.cnblogs.com/qa-freeroad/p/13664794.html
Copyright © 2020-2023  润新知