Go rpc утечка памяти или отсутствие понимания? - PullRequest
0 голосов
/ 05 декабря 2018

Я написал код rpc в go, используя стандартную библиотеку.

Моя система - kubuntu 18.10 64-битные все обновления, применяемые вместе с golang 1.11.

В обновлении моих первоначальных предположений об использовании памяти они оказались неверными, поэтому вот мое обновлениевопрос.Вопрос по-прежнему связан с постоянным ростом потребления памяти.

Обновление:

Я провел дополнительное исследование и, вероятно, все еще не совсем правильно понял.

Iнаписал простой тестовый сервер и клиент следующим образом:

Клиент:

package main

import (
   "net/rpc"
)

import (
"fmt"
"log"
)

type Args struct {
    ThrottleName string
    BatchSize    int
}



func main() {


throttle, err := rpc.Dial("tcp", "127.0.0.1:1234")
if err != nil {
    log.Fatal("dialing:", err)
}
fmt.Println("done dial")
var reply int

var tc = Args{ThrottleName: "a", BatchSize: 10}
for {
    _ = throttle.Call("Task.Throttle", tc, &reply)
    fmt.Println(reply)
}

}

Сервер:

package main

import (
    "net"
    "net/rpc"


    "time"
)

type Args struct {
    ThrottleName string
    BatchSize    int
}

type Task int

func (t *Task) Throttle(args *Args, reply *int) error {

   time.Sleep(1 * time.Microsecond)
   //reply = 0
   return nil
}

func main() {

    task := new(Task)
    rpc.Register(task)
    listener, _ := net.Listen("tcp", ":1234")
    defer listener.Close()
    rpc.Accept(listener)
}

Затем я запустил сервер.Проверено использование памяти с помощью:

ps -eo size,command --sort -size | grep rpctest | awk '{ hr=$1/1024 ; sum +=hr} END {print sum}'

Это зарегистрировало около 140 МБ, затем я запустил клиент, использование памяти со временем возрастает, через 5,5 часов он достиг 359 МБ.Я не могу подтвердить, что он закончил лазать.

Затем я остановил клиент, и через 2 часа использование памяти все еще было на уровне 359 МБ.

Я думаю, мой обновленный вопрос:

Я делаю что-то не так?

Почему использование памяти по крайней мере не уменьшается после выхода из клиента?

Почему память продолжает расти при использовании?

Извините заУжасная проверка ошибок.

Окончательное дополнение Я также попробовал:

stress --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2}' < /proc/meminfo)k --vm-keep -m 1

В случае, если система не возвращала память с ходу.

...