文章目录

  • 如何获取服务器的CPU,内存进行限流

如何获取服务器的CPU,内存进行限流

  • 需要包名
 "github.com/shirou/gopsutil/v3/cpu""github.com/shirou/gopsutil/v3/mem"
  • 定义存储数据的结构体
type MachineInfo struct {CpuUsedRate float64MemUsedRate float64PassRate    float64
}
  • 单例模式
var machineInfo *MachineInfovar once sync.Oncefunc GetMachineInfo() *MachineInfo {if machineInfo == nil {once.Do(func() {if machineInfo == nil {machineInfo = new(MachineInfo)machineInfo.MemUsedRate = 0machineInfo.CpuUsedRate = 0}})}return machineInfo
}
  • 1s周期获取cpu,mem信息
// 1s更新一次
func (mi *MachineInfo) FetchCpuMemInfo() {GetGoPool().AddFunc(func() {for {time.Sleep(1 * time.Second)v, _ := mem.VirtualMemory()//fmt.Println("mem: \n", v.UsedPercent)// almost every return value is a structmi.MemUsedRate = v.UsedPercent//fmt.Println("mi.MemRate: \n", mi.MemUsedRate)}})GetGoPool().AddFunc(func() {for {time.Sleep(1 * time.Second)// convert to JSON. String() is also implementedv1, _ := cpu.Percent(time.Second, false)//fmt.Println("cpu: \n", v1[0])mi.CpuUsedRate = v1[0]//fmt.Println("mi.CpuRate : \n", mi.CpuUsedRate)}})GetGoPool().AddFunc(func() {mi.CalcPassRate()})
}
  • 根据cpu,mem信息获取通过率
func (mi *MachineInfo) CalcPassRate() {GetGoPool().AddFunc(func() {for {var rateMem float64 = 1var rateCpu float64 = 1time.Sleep(1 * time.Second)if mi.MemUsedRate >= 85 {rateMem = 0} else if mi.MemUsedRate < 85 && mi.MemUsedRate >= 75 {rateMem = 0.2} else if mi.MemUsedRate < 75 && mi.MemUsedRate >= 70 {rateMem = 0.4} else if mi.MemUsedRate < 70 && mi.MemUsedRate >= 60 {rateMem = 0.6}if mi.CpuUsedRate >= 85 {rateMem = 0} else if mi.CpuUsedRate < 85 && mi.CpuUsedRate >= 75 {rateMem = 0.2} else if mi.CpuUsedRate < 75 && mi.CpuUsedRate >= 70 {rateMem = 0.4} else if mi.CpuUsedRate < 70 && mi.CpuUsedRate >= 60 {rateMem = 0.6}if rateMem > rateCpu {mi.PassRate = rateCpu} else {mi.PassRate = rateMem}}})
}func (mi *MachineInfo) GetPassRate() float64 {return mi.PassRate
}
  • 最后根据通过率进行相应端口的限流策略
  • 小知识点
    • docker中可以获取宿主机的cpu,内存信息
    • 如果不能开启特权模式(docker-compose文件中 privilege: true, 然后映射cpu文件到docker中)

如何获取服务器的CPU,内存进行限流相关推荐

  1. aix服务器如何查看cpu信息,aix服务器查看cpu内存

    aix服务器查看cpu内存 内容精选 换一换 查询该租户下,所有资源的配额信息,包括已使用配额.GET /v1/{project_id}/baremetalservers/limits参数说明请参见表 ...

  2. 2020年8月腾讯云服务器收费标准(CPU/内存/带宽/磁盘价格表)

    2020年8月腾讯云服务器收费标准(CPU/内存/带宽/磁盘价格表) 腾讯云服务器价格是由CPU.内存.公网带宽.云硬盘组成的,云服务器配置不同.CVM实例规格不同云服务器价格也不同,腾讯云公网带宽价 ...

  3. uuid怎么获取_我们经常说的限流应该怎么做?

    我们为什么需要限流 1.在微服务复杂拓扑的情况下,限流是保障服务弹性和拓扑健壮的重中之重. 想一想,如果业务推出了一个秒杀活动,而你没有任何的限流措施:当你搭建了一个账号平台,而完全没有对十几个业务方 ...

  4. php 获取cpu,Windows下如何利用PHP获取服务器的CPU和内存参数状态信息

    通过生成vbs脚本获取CPU和内存信息. class SystemInfoWindows { /** * 判断指定路径下指定文件是否存在,如不存在则创建 * @param string $fileNa ...

  5. java获取服务器的cpu和内存使用率

    使用的是sigar.jar包 sigar.jar下载地址密码1j2r 使用方法这三个文件放到jdk安装目录的bin下: Sigar sigar = new Sigar();Mem mem = siga ...

  6. C#-获取磁盘,cpu,内存信息

    获取磁盘信息zongdaxiao = GetHardDiskSpace("C") * 1.0 / 1024; user = GetHardDiskFreeSpace("C ...

  7. Python 获取服务器的CPU个数

    在使用gunicorn时,需要设置workers, 例如: gunicorn --workers=3 app:app -b 0.0.0.0:9000 其中,worker的数量并不是越多越好,推荐值是C ...

  8. 怎么查看服务器的CPU内存使用情况

    Linux 查看CPU,内存使用情况 Top第一行: 14:29:00-当前系统时间 up 4 days,4:23-系统已经运行了4天4小时23分钟(在这期间没有重启过) 1user-当前有1个用户登 ...

  9. 今天专攻POWERSHELL获取本机CPU,内存消耗

    PS脚本如下: 1 $Server = $env:computername 2 #server's CPU Mem Hardinfor 3 $cpu = gwmi –computername $Ser ...

最新文章

  1. ZJU-java进阶笔记 第七周(输入输出)
  2. Delphi7的主窗口
  3. 安装Autodesk Vault Server 总提示需要重启计算机?
  4. 使用原型相对于直接在构造函数中定义方法的优势? [重复]
  5. 由IP和掩码计算广播地址
  6. STL之Map和MFC之CMap比较学习
  7. Arithmetic图像处理halcon算子持续更新
  8. 小白学python需要多久_小白学Python | 你还在说你入不了门吗
  9. 安卓文本编辑器php cpp,开源的Android富文本编辑器
  10. 2020 数据技术嘉年华:吹响国产数据库的集结号 诚邀参会览技术前沿
  11. win7 64 php5ts.dll,windows7 64位 php5.3安装php_mongo.dll方法
  12. 长话无需短说 讯飞输入法超长语音输入不限时
  13. JavaScript中大数相加的解法
  14. git报错:no matching key exchange method found
  15. AndroidDeveloper Weekly No.1
  16. winform npoi 将execl转换成datatable,导入数据库
  17. 机器视觉运动控制一体机应用例程|U盘视觉定位激光打标解决方案
  18. 安卓手机如何复制粘贴不重叠_复制的文字粘贴时怎么重叠了 - 卡饭网
  19. 斯蒂夫·乔布斯《你必须要找到你所爱的东西》
  20. 线性丢番图方程 --算法竞赛专题解析(21):数论

热门文章

  1. Latex系列4---数学公式
  2. [Java基础]常见的运行时异常
  3. vue项目中如何使用有向无环图(dag-diagram)
  4. KEIL MDK 提示“no browse info for symbol in this context”
  5. sim卡插上显示不服务器,不插SIM卡手机紧急呼叫成摆设 专家:建统一服务器
  6. 佛言禅语-----生命的智慧
  7. VSCode SSH 免密登录
  8. LINUX查看系统、资源、磁盘和分区、网络、进程、用户
  9. SpringBoot仿天猫商城java web购物网站的设计与实现
  10. 浅析ODS与EDW 关系(转载)