мои программы работают в контейнере. Эта программа применяла большой объем памяти (но все еще остается более 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
Почему процесс в cgroup вызывает значительное сокращение буферов? ⇐ Linux
-
Anonymous
1729500694
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)
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79109259/why-does-a-process-in-cgroup-cause-a-large-reduction-in-buffers[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия