首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成/运行执行过程中出错

生成/运行执行过程中出错
EN

Stack Overflow用户
提问于 2018-01-27 15:05:07
回答 1查看 161关注 0票数 0

我创建了一个简单的go脚本:https://gist.github.com/kbl/86ed3b2112eb80522949f0ce574a04e3

它从互联网上获取一些xml,然后启动。X取决于文件内容。对我来说是1700个大猩猩。

我的第一次处决结束时:

代码语言:javascript
复制
$ go run mathandel1.go 
2018/01/27 14:19:37 Get https://www.boardgamegeek.com/xmlapi/boardgame/162152?pricehistory=1&stats=1: dial tcp 72.233.16.130:443: socket: too many open files
2018/01/27 14:19:37 Get https://www.boardgamegeek.com/xmlapi/boardgame/148517?pricehistory=1&stats=1: dial tcp 72.233.16.130:443: socket: too many open files
exit status 1

我试图把ulimit提高到2048年。

现在我得到了不同的错误,脚本是相同的--你:

代码语言:javascript
复制
$ go build mathandel1.go 
# command-line-arguments
/usr/local/go/pkg/tool/linux_amd64/link: flushing $WORK/command-line-arguments/_obj/exe/a.out: write $WORK/command-line-arguments/_obj/exe/a.out: file too large

是什么导致了这个错误?我怎么才能解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-27 15:11:19

您运行了ulimit 2048,它更改了最大文件大小。

来自man bash(1)ulimit部分:

如果没有提供任何选项,则假定为-f。

这意味着您现在将最大文件大小设置为2048字节,这可能还不够.什么都行。

我猜您是想更改打开文件描述符数量的限制。为此,您要运行:

代码语言:javascript
复制
ulimit -n 2048

至于原始错误(在更改最大文件大小之前),您将启动1700个goroutines,每个都执行一个http。每个都使用tcp套接字创建一个连接。这些都被打开的文件描述符限制所涵盖。

相反,您应该限制并发下载的数量。这可以通过一个简单的工人池模式来完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48477094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档