好好爱自己!

golang写一个占用大内存的程序

 

场景, 需要让系统的内存使用率上升到超过20%, 可以用golang写一个简单的程序,让它占用很大的内存,从而使系统的内存使用率上升。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main
 
import (
    "log"
    "time"
    "runtime"
    "fmt"
)
 
func PrintMemUsage() {
        var m runtime.MemStats
        runtime.ReadMemStats(&m)
        // For info on each, see: https://golang.org/pkg/runtime/#MemStats
        fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc))
        fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc))
        fmt.Printf("\tSys = %v MiB", bToMb(m.Sys))
        fmt.Printf("\tNumGC = %v\n", m.NumGC)
}
 
func bToMb(b uint64) uint64 {
    return b / 1024 / 1024
}
 
func main() {
 
    var a []string
 
    for i:= 1; i<31000000; i++ {
        a = append(a, "testingiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii123")
    }
    log.Println("end---")
    PrintMemUsage()
    for {
        //runtime.GC()  //调用 runtime.GC() 进行手动触发GC进行内存回收
        PrintMemUsage()
        log.Println(a[3100000])
        time.Sleep(time.Second * 2)
    }
    time.Sleep(time.Second * 100)
    log.Println("test memory end...", len(a))
}
                                                                                                                        

  

 

 手动触发GC

 -------------------------------------------------------------------------------------------------------0804------------

一个消耗内存(以Mb为单位)的小程序

    有时候需要消耗指定大小的内存来验证一些问题,这个时候一些小程序就可以帮上忙了,下面这个小程序malloc_mb.c就是这样的作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
  
#define UNIT (1024*1024)
  
int main(int argc, char *argv[])
{
        long long i = 0;
        int size = 0;
  
        if (argc != 2) {
                printf(" === argc must 2\n");
                return 1;
        }
        size = strtoull(argv[1], NULL, 10);
        if (size == 0) {
                printf(" argv[1]=%s not good\n", argv[1]);
                return 1;
        }
  
        char *buff = (char *) malloc(size * UNIT);
        if (buff)
                printf(" we malloced %d Mb\n", size);
        buff[0] = 1;
  
        for (i = 1; i < (size * UNIT); i++) {
                if (i%1024 == 0)
                        buff[i] = buff[i-1]/8;
                else
                        buff[i] = i/2;
        }
        pause();
}
————————————————
版权声明:本文为CSDN博主「温暖的电波」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wennuanddianbo/article/details/81709894

   通过  gcc malloc_mb.c -o mallocMb 命令就可以生成一个小程序mallocMb; 使用./mallocMb 100 &就可以在系统中消耗掉100M的内存。

 

posted @   立志做一个好的程序员  阅读(1030)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2018-08-03 [转] 一篇好文 ---steve jobs (stay hungry, stay foolish)
2018-08-03 【转】The && and || Operator in JavaScript
2018-08-03 shorthand trick with boolean expressions
2017-08-03 这本将shell的书应该不错
2017-08-03 linux sh 脚本调用外部命令
2016-08-03 论习惯的重要性
2016-08-03 cakephp 2.0 源码解读(一)

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示