• Docker(十九)-Docker监控容器资源的占用情况


    启动一个容器并限制资源

    启动一个centos容器,限制其内存为1G ,可用cpu数为2

    [root@localhost ~]# docker run --name os1 -it -m 1g --cpus=2 centos:latest bash

    启动容器后,可以使用docker 的监控指令查看容器的运行状态

    • docker top 容器名: 查看容器的进程,不加容器名即查看所有
    • docker stats 容器名:查看容器的CPU,内存,IO 等使用信息
    [root@localhost ~]# docker stats os1
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    f9420cbbd2a9        os1                 45.94%              47.09MiB / 1GiB     4.60%               54.6MB / 352kB      0B / 21.1MB         3

    安装stress

    在容器中安装docker容器压测工具 stress

    #先安装一些基础工具
    [root@f9420cbbd2a9 /]# yum install wget gcc gcc-c++ make -y
    #下载stress
    [root@f9420cbbd2a9 ~]# wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz
    #安装
    [root@f9420cbbd2a9 ~]# tar zxf stress-1.0.4.tar.gz
    [root@f9420cbbd2a9 ~]# cd stress-1.0.4
    [root@f9420cbbd2a9 stress-1.0.4]./configure
    [root@f9420cbbd2a9 stress-1.0.4]# make
    [root@f9420cbbd2a9 stress-1.0.4]# make install

    stress压测

    在容器使用stress指令进行负载压测

    [root@f9420cbbd2a9 ~]# stress  -m 1204m --vm 2
    #模拟出4个繁忙的进程消耗cpu,然后使用-m 模拟进程最大使用的内存数1024,使用--vm 指定进程数
    

    使用docker指令查看容器运行状态,可以os1容器的内存和cpu都得到了限制,即使给压测时超出了最大内存,也不会额外占用资源

    [root@localhost ~]# docker stats os1
    CONTAINER ID       NAME       CPU %            MEM USAGE / LIMIT  MEM %         NET I/O              BLOCK I/O           PIDS
    f9420cbbd2a9        os1          127.46%          319.7MiB / 1GiB     31.22%        54.8MB / 356kB      0B / 33.6MB          9

    Stress参数说明

    -? 显示帮助信息
    -v 显示版本号
    -q 不显示运行信息
    -n,--dry-run 显示已经完成的指令执行情况
    -t --timeout N 指定运行N秒后停止
       --backoff N 等待N微妙后开始运行
    -c --cpu 产生n个进程 每个进程都反复不停的计算随机数的平方根
    -i --io  产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上
    -m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数
       --vm-bytes B 指定malloc时内存的字节数 (默认256MB)
       --vm-hang N 指示每个消耗内存的进程在分配到内存后转入休眠状态,与正常的无限分配和释放内存的处理相反,这有利于模拟只有少量内存的机器
    -d --hadd n 产生n个执行write和unlink函数的进程
       --hadd-bytes B 指定写的字节数,默认是1GB
       --hadd-noclean 不要将写入随机ASCII数据的文件Unlink
    时间单位可以为秒s,分m,小时h,天d,年y,文件大小单位可以为K,M,G

    Stress使用实例

    • 产生13个cpu进程4个io进程1分钟后停止运行

    $ stress -c 13 -i 4 --verbose --timeout 1m
    • 产生3个cpu进程、3个io进程、2个10M的malloc()/free()进程,并且vm进程中malloc的字节不释放

    $ stress --cpu 3 --io 3 --vm 2 --vm-bytes 10000000 --vm-keep --verbose
    • 测试硬盘,通过mkstemp()生成800K大小的文件写入硬盘,对CPU、内存的使用要求很低

    $ stress -d 1 --hdd-noclean --hdd-bytes 800k
    • 产生13个进程,每个进程都反复不停的计算由rand ()产生随机数的平方根

    $ stress -c 13
    • 产生1024个进程,仅显示出错信息

    $ stress --quiet --cpu 1k
    • 产生4个进程,每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上

    $ stress -i 4
    • 向磁盘中写入固定大小的文件,这个文件通过调用mkstemp()产生并保存在当前目录下,默认是文件产生后就被执行unlink(清除)操作,但是可以使用--hdd-bytes选项将产生的文件全部保存在当前目录下,这会将你的磁盘空间逐步耗尽

    # 生成小文件
    $ stress -d 1 --hdd-noclean --hdd-bytes 13
    
    # 生成大文件
    $ stress -d 1 --hdd-noclean --hdd-bytes 3G
     
  • 相关阅读:
    基于.Net6.0开发WebApi(三) —— 项目中一些运用技巧
    JS FreeCodeCamp
    AutoCAD VBA打开文件对话框
    VBNET设置程序自启动
    C# 将html网页生成pdf
    C#生成二维码 使用ZXing.Net和ThoughtWorks.QRCode
    C# 生成html文件
    C# 调用打印机打印机pdf
    docker基础镜像修改生成步骤
    左膝核磁结果,右侧核磁结果
  • 原文地址:https://www.cnblogs.com/zhuochong/p/9729032.html
Copyright © 2020-2023  润新知