人为提升服务器CPU、内存、硬盘使用率
一、CPU使用率
vikyd/go-cpu-load: Generate CPU load on Windows/Linux/Mac (github.com)
所有CPU核心负载30%运行10秒钟
./cpu -p 30 -t 10
所有CPU核心负载30%持续运行
./cpu -p 30
后台运行,CPU使用率不低于20%
nohup ./cpu -p 21 >> cpu.log 2>&1 &
只让2个CPU核心负载30%运行10秒钟
./cpu -p 30 -c 2 -t 10
all CPU load
= (num of parac
_ num ofp
) / (all cores count of CPU _ 100)- may not specify cores run the load only, it just promise the
all CPU load
, and not promise each cores run the same load
参数
--coresCount value, -c value how many cores (optional, default: 8) --timeSeconds value, -t value how long (optional, default: 2147483647) --percentage value, -p value percentage of each specify cores (required) --help, -h show help
源代码
package main import (
"log"
"os"
"runtime" cli "github.com/urfave/cli/v2"
) // EINVAL Error Code: #define EINVAL 22 /* Invalid argument */
const EINVAL = 23 const maxInt32 = 2147483647
const unLimitedTime = maxInt32
const missPercentageVal = 0 func main() {
var coresCount int
var timeSeconds int
var percentage int app := cli.NewApp() // app.Version = "0.0.2" app.Flags = []cli.Flag{
&cli.IntFlag{
Name: "coresCount",
Aliases: []string{"c"},
Value: runtime.NumCPU(),
Usage: "how many cores",
Destination: &coresCount,
},
&cli.IntFlag{
Name: "timeSeconds",
Aliases: []string{"t"},
Value: unLimitedTime,
Usage: "how long",
Destination: &timeSeconds,
},
&cli.IntFlag{
Name: "percentage",
Aliases: []string{"p"},
Value: missPercentageVal,
Usage: "percentage of each specify cores",
Destination: &percentage,
},
} app.Action = func(c *cli.Context) error {
// fmt.Println("coresCount: ", coresCount)
// fmt.Println("timeSeconds: ", timeSeconds)
// fmt.Println("percentage: ", percentage)
// fmt.Println("------") if coresCount < 1 || coresCount > runtime.NumCPU() {
return cli.NewExitError("coresCount not correct must between 1 - `max CPU cores`", EINVAL)
} if timeSeconds <= 0 {
return cli.NewExitError("timeSeconds not correct must be positive int", EINVAL)
} if percentage <= 0 || percentage > 100 {
return cli.NewExitError("percentage must between 1 - 100", EINVAL)
}
RunCPULoad(coresCount, timeSeconds, percentage)
return nil
} err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
二、内存使用率
快速进行内存泄露至2GB
$ ./memory -d 5 -l 2048
Leaked: 2048 MiB ███████▒▒▒
Holding at 2048 MiB
后台运行内存泄露至13GB
nohup ./memory -l 13312 >> memory.log 2>&1 &
参数
./memory [-d <泄露延迟 ms; 默认 100>] -d int 选项: 调整泄漏率的延迟(毫秒); 默认 100ms -l int 选项: 内存泄漏上限 (MiB); 默认无上限
源代码
// A utility simulates a memory leak for testing, diagnostic purposes
package main import (
"flag"
"fmt"
"os"
"runtime"
"runtime/debug"
"time" "github.com/briandowns/spinner"
) func main() {
// define and set default command parameter flags
var dFlag = flag.Int("d", 100, "Optional: delay is ms to adjust the leak rate; default is 100")
var lFlag = flag.Int("l", 1048576, "Optional: limit the leak to this many MiBs")
var hFlag = flag.Bool("h", false, "print usage information") // usage function that's executed if a required flag is missing or user asks for help (-h)
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "\nUsage: %s [-d <leak delay in ms; deafaults to 100> -l <leak limit in MiB>]\n", os.Args[0])
flag.PrintDefaults()
fmt.Println()
}
flag.Parse() //provide help (-h)
if *hFlag == true {
flag.Usage()
os.Exit(0)
} // a channel to use a hold when the memory limit it reached
hold := make(chan bool) // a spinner that displays how much memory has leaked and when it holding
go func(hold chan bool, lFlag int) {
s := spinner.New(spinner.CharSets[35], 250*time.Millisecond)
for {
mem := memUsage()
s.Prefix = fmt.Sprintf("Leaked: %d MiB ", mem)
s.Start()
s.Color("magenta")
time.Sleep(1 * time.Second)
s.Restart()
// if we've reached the limit, update display and hold
if mem >= uint64(lFlag) {
s.Color("green")
s.Prefix = fmt.Sprintf("Holding at %d MiB ", mem)
s.UpdateCharSet(spinner.CharSets[28])
s.UpdateSpeed(1 * time.Second)
s.Restart()
<-hold
}
}
}(hold, *lFlag) // Although the "leak" var should contiue to grow, the GC is somehow getting in the way, disabling
debug.SetGCPercent(-1)
var leak string
KB := `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ` // start leaking indefinitely unless a limit has been provided and met
for {
leak += KB
time.Sleep(time.Duration(*dFlag) * time.Millisecond)
mem := memUsage()
// if we've reached the limit, hold
if mem >= uint64(*lFlag) {
<-hold
}
}
} func memUsage() uint64 {
var m runtime.MemStats
runtime.ReadMemStats(&m)
return bToMb(m.Alloc)
} func bToMb(b uint64) uint64 {
return b / 1024 / 1024
}
人为提升服务器CPU、内存、硬盘使用率的更多相关文章
- 一个统计 CPU 内存 硬盘 使用率的shell脚本
一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 #!/bin/bash #This script is use for describle CPU Hard Memery Uti ...
- Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)
[转]Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Wind ...
- Windows 性能监视器的基本指标(CPU,内存,硬盘参数)
转载:http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的 ...
- VPS性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench和压力测试
现在便宜的VPS主机越来越多了,一些美国的VPS主机甚至给出1美元一月的VPS,堪比虚拟主机还要便宜,巨大的价格优势吸引不少人购买和使用,而近些年来国内的主机商也开始意识到便宜的VPS对草根站长的诱惑 ...
- centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息
1.系统 1.1版本 uname -a 能确认是64位还是32位,其它的信息不多 [root@localhost ~]# uname -a Linux localhost.localdomain 3. ...
- linux 查看cpu 内存 硬盘 文件夹大小
文件夹大小 显示cpu使用率 top 1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | w ...
- DSAPI 获取实时统计信息CPU/内存/硬盘/网络
有时,我们需要获取当前计算机中CPU.内存.硬盘.网络等实时信息,如下图:\ 要实现上述几项信息的获取,通常需要使用Timer控件来间隔获取,以便刷新最新的数据. 本示例中,放一个Timer控件,放一 ...
- python glances来监控linux服务器CPU 内存 IO使用
什么是 Glances? Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具. 通过 Glances,我们可以监视 ...
- 查看CPU 内存 硬盘 网络 查看进程使用的文件 uptime top ps -aux vmstat iostat iotop nload iptraf nethogs
#安装命令 yum install sysstat #包含 iostat vmstat yum install iotop yum install nload yum install iptraf ...
- CPU 内存 硬盘的区别
第一点:CPU 是处理器,内存和硬盘是存储器,受CPU 的控制. 第二点:由于内存的速度很快,在电脑运行的过程中,CPU通常只与内存交换数据,但内存断电数据就会全部丢失,因此电脑使用硬盘作为主要的存 ...
随机推荐
- LeetCode HOT 100:乘积最大子数组(动态规划)
题目:152. 乘积最大子数组 题目描述: 给你一个整数数组,在该数组的所有子数组中,找到一个子数组中所有元素相乘积最大,返回这个最大的积.子数组就是一个数组中,由一个或几个下标连续的元素,组成的小数 ...
- LOJ 数列分块入门 8
\(\text{Solution}\) 一看有区间赋值直接上 \(ODT\) \(\text{Code}\) #include <cstdio> #include <iostream ...
- NOIP 模拟赛 简单题
\(\text{Solution}\) 发现题目就是求 \(\sum[\prod_{i=1}^k x_i \le n]\) \(k \le 10^9\) 太可怕了 然而发现如果限定 \(x_i > ...
- 从Linux Bridge引发的网桥、交换机与路由器区别探究
背景 最近接触docker的网络配置方式,发现其默认会创建一个docker0的Linux Bridge,宿主机上运行的容器可以通过连接该birdge实现与外网的通信,根据bridge这个命名很自然的认 ...
- 基于C++的OpenGL 11 之投光物
1. 引言 本文基于C++语言,描述OpenGL的投光物 前置知识可参考: 基于C++的OpenGL 10 之光照贴图 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多 ...
- chai 3D 之网格对象
推荐:将 NSDT场景编辑器 加入你的3D开发工具链 介绍 网格对象是由三角形和顶点组成的形状 在 CHAI3D 中,多边形网格是定义多面体对象形状的顶点和三角形的集合. 顶点是一个位置以及其 ...
- Study for Go ! Chapter two - Expression
Study for Go ! Chapter two - Expression 1. Keyword Golang仅有 25 个保留关键字,体现了 golang 语法规则的简洁性 保留关键字不能用作常 ...
- php链接access并查询列出
<?php$odbc = "Driver={Microsoft Access Driver (*.mdb)};Dbq=".realpath("db.mdb" ...
- spring boot 3.x 配置spring security
参考文章:https://spring.io/guides/gs/securing-web/ 导入maven <dependency> <groupId>org.springf ...
- API 文档
API 文档 Java类的组织形式 使用API查找方法: 包 -> 类 -> 方法 直接检索:Math