我创建了一个简单的go脚本:https://gist.github.com/kbl/86ed3b2112eb80522949f0ce574a04e3
它从互联网上获取一些xml,然后启动。X取决于文件内容。对我来说是1700个大猩猩。
我的第一次处决结束时:
$ 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年。
现在我得到了不同的错误,脚本是相同的--你:
$ 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是什么导致了这个错误?我怎么才能解决呢?
发布于 2018-01-27 15:11:19
您运行了ulimit 2048,它更改了最大文件大小。
来自man bash(1),ulimit部分:
如果没有提供任何选项,则假定为-f。
这意味着您现在将最大文件大小设置为2048字节,这可能还不够.什么都行。
我猜您是想更改打开文件描述符数量的限制。为此,您要运行:
ulimit -n 2048至于原始错误(在更改最大文件大小之前),您将启动1700个goroutines,每个都执行一个http。每个都使用tcp套接字创建一个连接。这些都被打开的文件描述符限制所涵盖。
相反,您应该限制并发下载的数量。这可以通过一个简单的工人池模式来完成。
https://stackoverflow.com/questions/48477094
复制相似问题