Почему процесс в cgroup вызывает значительное сокращение буферов?Linux

Ответить
Anonymous
 Почему процесс в cgroup вызывает значительное сокращение буферов?

Сообщение Anonymous »

мои программы работают в контейнере. Эта программа применяла большой объем памяти (но все еще остается более 50% памяти всей системы. А загрузка процессора составляет менее 75%). Однако в это время буфер ввода-вывода системы Linux становится очень низким, из-за чего машина работает очень медленно, а другие процессы также становятся очень медленными из-за низкого буфера ввода-вывода.
Насколько я понимаю, процесс, изолированный cgroup, будет работать только влияет на память, выделенную контрольной группе. А уменьшение буфера происходит только тогда, когда памяти всей системы очень мало.
Но почему процесс в крупе также может вызывать это? Это нормально?
Я хочу достичь этой цели: процесс в контрольной группе не может влиять на внешние процессы.
изображение: буфер заканчивается
тестовая программа:
package main

import (

"fmt"

"net/http"

_ "net/http/pprof"

"runtime"

"time"

)

// MemoryConsumer simulates memory consumption by allocating byte arrays

func MemoryConsumer(sizeMB int, count int) [][]byte {

var allocations [][]byte

for i := 0; i < count; i++ {

// Allocate 'sizeMB' megabytes

allocation := make([]byte, sizeMB*1024*1024)

// Append to the allocations slice to prevent garbage collection

allocations = append(allocations, allocation)

// Output current memory stats

PrintMemUsage(i)

//time.Sleep(2 * time.Second)

}

return allocations

}

// PrintMemUsage prints the current, allocated, and heap memory statistics

func PrintMemUsage(i int) {

var m runtime.MemStats

runtime.ReadMemStats(&m)

// Print memory usage details

fmt.Printf("Alloc[%v] = %v MiB", i, 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)

}

// Helper function to convert bytes to megabytes

func bToMb(b uint64) uint64 {

return b / 1024 / 1024

}

func main() {

// Start pprof server for memory profiling

go func() {

fmt.Println("Starting pprof server on :6060")

http.ListenAndServe("localhost:6060", nil)

}()

// Simulate memory consumption

fmt.Println("Simulating memory consumption...")

allocations := MemoryConsumer(1000, 100000) // Allocate 100 MB for each array, 10 times

// Prevent immediate program exit to keep pprof server running

_ = allocations

time.Sleep(10 * time.Minute)

}


Подробнее здесь: https://stackoverflow.com/questions/791 ... in-buffers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»