слишком мало памяти для программы? - PullRequest
0 голосов
/ 25 октября 2019

Мне интересно, пишу ли я неправильно мою программу Go или ресурсы моего сервера слишком малы.

У меня есть следующий код:

    spotXmlFile:='/var/www/html/app/public/xml/appdata.xml'
    xmlFile,err:=os.Open(spotXmlFile)
    defer xmlFile.Close()
    byteValue,_:=ioutil.ReadAll(xmlFile)
    var listings Listings
    xml.Unmarshal(byteValue,&listings)

Он обрабатывает XML-файлэто 2,5 ГБ.

Я использую aws ec2 t3.large, чтобы попытаться обработать данные, которые имеют 2 cpus и 8GB mem

Что интересно, память не превышает4 Гб, но процессор резко возрастает до 100%, а затем вызывает сбой программы

1 Ответ

1 голос
/ 25 октября 2019

Вы читаете весь файл в памяти и затем демаршируете его, что потребует много дополнительной памяти, которая вам на самом деле не нужна. Попробуйте это, посмотрите, что произойдет:

spotXmlFile:='/var/www/html/app/public/xml/appdata.xml'
xmlFile,err:=os.Open(spotXmlFile)
defer xmlFile.Close()
var listings Listings
xml.NewDecoder(xmlFile).Decode(&listings)

Используя декодер, он будет анализировать и разбирать основной файл при его чтении.

Если вам нужна только часть файла и вы хотите провести дополнительную оптимизациюТаким образом, вы можете декодировать файл с помощью токена декодера по токену и извлечь нужную часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...