为了账号安全,请及时绑定邮箱和手机立即绑定

go程序内存不足ec2资源太小?

go程序内存不足ec2资源太小?

Go
呼如林 2023-07-31 15:50:32
我想知道我是否错误地编写了 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)它处理一个 2.5GB 的 xml 文件。我正在aws ec2 t3.large尝试处理数据,其中2 cpus有8GB mem有趣的是内存不超过4GB,但CPU却飙升至100%,然后导致程序失败
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您正在读取内存中的整个文件,然后对其进行解组,这将使用您并不真正需要的大量额外内存。试试这个,看看会发生什么:


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)

使用解码器,它将在读取时解析和解组底层文件。


如果您只需要文件的一部分并且想要进一步优化它,您可以使用解码器令牌逐个令牌对文件进行解码,并提取您需要的部分。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信