golang寫一個占用大內存的程序


 

場景, 需要讓系統的內存使用率上升到超過20%, 可以用golang寫一個簡單的程序,讓它占用很大的內存,從而使系統的內存使用率上升。

 

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就是這樣的作用:

#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的內存。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM