说明【必看】

下面占用代码,虽然已经很详细了,但没有一定linux基础 要谨慎操作,操作前最起码要熟悉每行代码功能,知道自己在干嘛!!!【如果占用出现意外不释放等情况不会解决就是个大麻烦】

CPU占用
代码
  • 这个脚本功能如下【这个脚本不难,代码就不做解释了】
    • 1、想占用多少颗CPU【被占用的cpu使用率会是100%】
    • 2、占用多长时间【单位是秒】
    • 3、占用时间到达以后,会自动kill掉相关进程【如果提前结束,需要手动结束占用进程】
[root@centos-73-iso-100g-test ~]# lscpu | grep CPU\(s\):CPU(s):                8NUMA node0 CPU(s):     0-7[root@centos-73-iso-100g-test ~]# [root@centos-73-iso-100g-test ~]# cat cpu.sh #!/bin/bash  rm -rf /root/file.txt  endless_loop()  {          echo -ne "i=0; while true ;do         i=i+100;         i=100;done" | /usr/bin/bash &  }  if [ $# != 2 ]; then          echo "USAGE: $0 <cpus,sleep time>"          exit 1;  fi    for i in `seq $1`  do          endless_loop          pid_array[$i]=$!;  done    for i in "${pid_array[@]}"; do          echo 'execute: kill' $i ;          echo 'kill' $i  >> /root/file.txt doneecho "If executed ctrl+C,Please execute the above lines manually"echo "Please wait $2 seconds" sleep $2 for i in `awk '{print $2}' /root/file.txt` ; doecho "kill $i"kill $idone[root@centos-73-iso-100g-test ~]# 
测试
  • 执行前,重新打开一个窗口,执行top并按一下1,会列出所有cpu的使用率
top - 21:43:41 up 13 min,  3 users,  load average: 0.00, 0.01, 0.04Tasks: 194 total,   1 running, 193 sleeping,   0 stopped,   0 zombie%Cpu0  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu2  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu6  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu7  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem : 16267428 total, 15500496 free,   392744 used,   374188 buff/cacheKiB Swap: 10485756 total, 10485756 free,        0 used. 15559560 avail Mem 
  • 执行:sh cpu.sh 3 120 【意思是占用3颗cpu,占用120秒】
# 如果参数不够,该脚本是会报错的[root@centos-73-iso-100g-test ~]# sh cpu.sh 3USAGE: cpu.sh <cpus,sleep time>[root@centos-73-iso-100g-test ~]# # 执行以后可以就会出现下面内容【此时该脚本并不会结束,而是处于 sleep 120状态[root@centos-73-iso-100g-test ~]# sh cpu.sh 3 120execute: kill 3083execute: kill 3085execute: kill 3087If executed ctrl+C,Please execute the above lines manuallyPlease wait 120 seconds
  • 回到刚才执行top的窗口中,可以看到有3颗cpu的使用率为100%
[root@centos-73-iso-100g-test ~]# toptop - 21:45:21 up 15 min,  3 users,  load average: 0.67, 0.16, 0.09Tasks: 199 total,   4 running, 195 sleeping,   0 stopped,   0 zombie%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu2  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu5  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu6  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu7  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem : 16267428 total, 15499112 free,   394012 used,   374304 buff/cacheKiB Swap: 10485756 total, 10485756 free,        0 used. 15558272 avail Mem 
  • 120秒以后,该脚本就结束了,并自动kill掉这几个进程
[root@centos-73-iso-100g-test ~]# sh cpu.sh 3 120execute: kill 3083execute: kill 3085execute: kill 3087If executed ctrl+C,Please execute the above lines manuallyPlease wait 120 secondskill 3083kill 3085kill 3087[root@centos-73-iso-100g-test ~]# 
  • 此时 top界面的cpu使用率也被释放了
[root@centos-73-iso-100g-test ~]# toptop - 21:47:48 up 17 min,  3 users,  load average: 1.26, 0.84, 0.37Tasks: 193 total,   1 running, 192 sleeping,   0 stopped,   0 zombie%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu6  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu7  :  0.8 us,  0.0 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem : 16267428 total, 15499472 free,   393652 used,   374304 buff/cacheKiB Swap: 10485756 total, 10485756 free,        0 used. 15558620 avail Mem 
内存占用
代码形式
代码
  • 这个脚本功能如下【这个脚本不难,代码就不做解释了】
    • 1、想占用多少内存【单位是M(不能超过现有内存,否则可能会蹦)】
    • 2、占用多长时间【单位是秒】
    • 3、占用时间到达以后,会自动释放被占用的内存【如果提前结束,需要手动删除占用文件】
[root@centos-76-qcow2-50g-3 ~]# free -g              total        used        free      shared  buff/cache   availableMem:             62           0          62           0           0          61Swap:             0           0           0[root@centos-76-qcow2-50g-3 ~]# [root@centos-76-qcow2-50g-3 ~]# cat free.sh#!/bin/bashif [ $# != 2 ]; then        echo "USAGE: $0 <free,sleep time>"        exit 1;fi free -m > /tmp/freeecat /tmp/freeemkdir /tmp/memorymount -t tmpfs -o size=$1M tmpfs /tmp/memorydd if=/dev/zero of=/tmp/memory/blockfree -m > /tmp/freeecat /tmp/freeeecho "If executed ctrl+C,Please execute the following lines manually"echo "execute: rm -rf /tmp/memory/block"echo "execute: umount /tmp/memory"echo "execute: rmdir /tmp/memory"echo "Please wait $2 seconds" sleep $2rm -rf /tmp/memory/blockumount /tmp/memoryrmdir /tmp/memory[root@centos-76-qcow2-50g-3 ~]# 
测试
  • 执行:sh free.sh 2048 120【2048是内存数量,单位是M,120是时间,单位是秒】
  • 因为我这台虚机有64,所以我定义的是20480,占用20G
# 如果参数不够 会报错的[root@centos-76-qcow2-50g-3 ~]# sh free.sh 1024USAGE: free.sh <free,sleep time>[root@centos-76-qcow2-50g-3 ~]# # 执行以后可以就会出现下面内容【此时该脚本并不会结束,而是处于 sleep 120状态[root@centos-76-qcow2-50g-3 ~]# sh free.sh  20480  120              total        used        free      shared  buff/cache   availableMem:          64264         451       63559          16         253       63300Swap:             0           0           0dd: writing to ‘/tmp/memory/block’: No space left on device41943041+0 records in41943040+0 records out21474836480 bytes (21 GB) copied, 67.0879 s, 320 MB/s              total        used        free      shared  buff/cache   availableMem:          64264         451       43033       20496       20779       42797Swap:             0           0           0If executed ctrl+C,Please execute the following lines manuallyexecute: rm -rf /tmp/memory/blockexecute: umount /tmp/memoryexecute: rmdir /tmp/memoryPlease wait 120 seconds
这个占用的是 shared共享内存,可以看到数量已经有变化了,并且free可用内存也相应减少了
linux的CPU占用脚本、内存占用脚本和硬盘IO测试代码
  • 等待120秒以后呢,该脚本运行结束,并且占用的内存也会被释放
  • [root@centos-76-qcow2-50g-3 ~]# sh free.sh  20480  120              total        used        free      shared  buff/cache   availableMem:          64264         451       63559          16         253       63300Swap:             0           0           0dd: writing to ‘/tmp/memory/block’: No space left on device41943041+0 records in41943040+0 records out21474836480 bytes (21 GB) copied, 67.0879 s, 320 MB/s              total        used        free      shared  buff/cache   availableMem:          64264         451       43033       20496       20779       42797Swap:             0           0           0If executed ctrl+C,Please execute the following lines manuallyexecute: rm -rf /tmp/memory/blockexecute: umount /tmp/memoryexecute: rmdir /tmp/memoryPlease wait 120 seconds[root@centos-76-qcow2-50g-3 ~]# [root@centos-76-qcow2-50g-3 ~]# free -m              total        used        free      shared  buff/cache   availableMem:          64264         451       63559          16         253       63300Swap:             0           0           0[root@centos-76-qcow2-50g-3 ~]#
    rpm包的方式
    rpm包下载安装
    • 这个rpm包下载地址:内存占用rpm包.rar
      下载好以后上传到linux主机上,然后通过下面方法安装好。
    [root@ccx ~]# ls /optmemload-7.0-1.r29766.x86_64.rpm[root@ccx ~]# rpm -ivh /opt/memload-7.0-1.r29766.x86_64.rpm Preparing...                          ################################# [100%]Updating / installing...   1:memload-7.0-1.r29766             ################################# [100%][root@ccx ~]# 
    占用测试
    • 基本环境弄好了,我们现在开始消耗内存看看【占用内存不要超过总内存】
      我下面是在多个窗口中,注意看主机名 的变化
    # 可以看到node2现在消耗了1G内存[root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31           1          28           0           1          29Swap:             0           0           0[root@ccx ~]# #现在回到容器内部开始占用内容,因为我这虚机是32G内存,所以我占用多一点吧#容器中占用了10G[root@ccx ~]# memload 10240Attempting to allocate 10240 Mebibytes of resident memory...# 回到node2,可以看到10G确实可以被占用的[root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31           1          28           0           1          29Swap:             0           0           0[root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31           4          24           0           1          25Swap:             0           0           0[root@ccx ~]# [root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31           7          22           0           1          23Swap:             0           0           0[root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31           8          21           0           1          22Swap:             0           0           0[root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31          11          18           0           1          19Swap:             0           0           0[root@ccx ~]# 
    释放
    • 上面呢是可以正常释放的,现在我们释放掉占用的这10G
    #容器ctrl+c即可释放[root@ccx ~]# memload 10240Attempting to allocate 10240 Mebibytes of resident memory...Allocated 10000 pages^C[root@ccx ~]# # 回到node2看是否已经被释放,然后再释放下缓存内存[root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31           1          28           0           1          29Swap:             0           0           0[root@ccx ~]# echo 3 > /proc/sys/vm/drop_caches [root@ccx ~]# [root@ccx ~]# free -g              total        used        free      shared  buff/cache   availableMem:             31           1          29           0           0          29Swap:             0           0           0[root@ccx ~]# 
    硬盘IO测试
    hdparm命令
    这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lordmlord@pobox.com, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UNIX系统,ATA/IDE硬盘用的可能比较少,一般大型的系统都是使用磁盘阵列的.
  • 使用方法很简单
  • # /dev/sda3 是设备名称[root@centos-76-qcow2-50g-3 ~]# hdparm -Tt /dev/sda3/dev/sda3: Timing cached reads:   13034 MB in  2.00 seconds = 6527.09 MB/sec Timing buffered disk reads: 194 MB in  5.60 seconds =  34.64 MB/sec[root@centos-76-qcow2-50g-3 ~]#

    可以看到,2秒钟读取了13034MB的缓存,约合6527.09 MB/sec;
    在3.11秒中读取了194MB磁盘(物理读),读取速度约合4.64 MB/sec

    dd命令
    • 这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来对磁盘的读写速度作一个简单的评估.另外由于这是一个免费软件,基本上×NIX系统上都有安装。
    • dd命令可以通用,但不够专业,也没有考虑到缓存和物理读的区分,测试的数据也是仅作参考,不能算是权威。
    • 首先了解两个特殊设备
      • /dev/null 伪设备,回收站.写该文件不会产生IO
      • /dev/zero 伪设备,会产生空字符流,对它不会产生IO
    硬盘IO写速度测试
    • 测试逻辑速度【结果较快】
      表示 每次写入8k的数据,执行300000次
    [root@centos-73-iso-100g-test data_vdb1]# time dd if=/dev/zero of=test.dbf bs=8k count=300000300000+0 records in300000+0 records out2457600000 bytes (2.5 GB) copied, 1.46149 s, 1.7 GB/sreal    0m1.464suser    0m0.027ssys     0m1.436s[root@centos-73-iso-100g-test data_vdb1]#
    • 测试真实的IO速度,需要在后面加上参数oflag=direct 【这个过程较慢】
    [root@centos-73-iso-100g-test data_vdb1]# time dd if=/dev/zero of=test.dbf bs=8k count=300000 oflag=direct300000+0 records in300000+0 records out2457600000 bytes (2.5 GB) copied, 423.33 s, 5.8 MB/sreal    7m3.561suser    0m0.992ssys     0m28.849s[root@centos-73-iso-100g-test data_vdb1]# 
    • 注意,上面操作会在当前路径留下一个test文件,记得删除啊
    [root@centos-73-iso-100g-test data_vdb1]# du -sh * | tail -n12.3G    test.dbf[root@centos-73-iso-100g-test data_vdb1]# rm -rf test.dbf [root@centos-73-iso-100g-test data_vdb1]# 
    硬盘IO读速度测试
      • 测试逻辑速度【结果较快】
        表示 每次读取8k的数据,执行300000次
    [root@centos-76-qcow2-50g-3 ~]# dd if=test.dbf bs=8k count=300000 of=/dev/null 300000+0 records in300000+0 records out2457600000 bytes (2.5 GB) copied, 5.97231 s, 411 MB/s[root@centos-76-qcow2-50g-3 ~]# 
    • 这个没法测试真实的IO速度,会报错
    [root@centos-76-qcow2-50g-3 ~]# dd if=test.dbf bs=8k count=300000 of=/dev/null oflag=directdd: failed to open ‘/dev/null’: Invalid argument[root@centos-76-qcow2-50g-3 ~]# 
    创建一个自定义大小的文件
    • 这个就当是扩展了,dd命令是可以用来创建一个指定大小的空文件的
    • dd命令解释
      dd if= of= bs= skip= seek= conv=
      一定不要搞混 source 和 target,不然数据会丢失。所以 dd 平时用着顺手就叫它 dd,但是不小心把数据弄没了就该哭着叫它 Data Destroyer 了。
    • 一般它的常用参数有:
      • if=初始路径
      • of=目的路径
      • bs=n,block size,每次读取 n bytes 写入,可与 count 联用;
      • ibs=n,一次读入 bytes 个字节 (default is 512);
      • obs=n,一次性写 n bytes 个字节 (default is 512);
      • bs= 可以同时设置上边两个参数;
      • cbs=n,一次转换 n 个 bytes,即转换缓冲区大小。;
      • count=n, bs 操作的次数,仅拷贝 n 个块,如 dvd: - bs=1M count=4430;
      • skip=n,指 if 后面的原文件跳过 n bytes 再开始读取;
      • seek=n,指 of 后面的目标文件跳过 n bytes 再开始写入;
    • 但我们常用的也就是 bs和count
      如,我创建一个3G的文件
    [root@centos-73-iso-100g-test data_vdb1]# dd if=/dev/zero of=/root/data_vdb1/data-test-0915 bs=1M count=30003000+0 records in3000+0 records out3145728000 bytes (3.1 GB) copied, 1.47652 s, 2.1 GB/s[root@centos-73-iso-100g-test data_vdb1]# du -sh *3.0G    data-test-0915[root@centos-73-iso-100g-test data_vdb1]# 
    举报/反馈

    小柳实验室

    233获赞 39粉丝
    IT安全运维技术分享网站
    关注
    0
    0
    收藏
    分享