我正在遷移到 circleci2.0 并且在成功構建后執行測試時它們隨機失敗并顯示以下錯誤消息/usr/local/go/pkg/tool/linux_amd64/link: signal: killed/usr/local/go/pkg/tool/linux_amd64/link: flushing $WORK/b462/payment_step_svc.test: write $WORK/b462/svc.test: cannot allocate memory我使用了以下配置jobs: build: docker: - image: circleci/golang:latest - image: rabbitmq:3.5.4 - image: redis working_directory: /go/src/github.com/soniabhishek/taskrunner environment: GOOS: linux GOARCH: amd64 GOPATH: /go steps: - checkout - run: name: Get dependencies command: go get -t -d -v ./... - run: name: Build all command: go build ./... - run: name: Test all command: go test -v ./...除了最新版本(1.10.3)之外,我已經嘗試過許多 golang 版本。雖然我找到了破解方法,但我不確定為什么會這樣,當我使用CGO_ENABLED=0時,我的所有測試都會運行想知道為什么會出現此問題以及此問題的永久解決方案
2 回答

海綿寶寶撒
TA貢獻1809條經驗 獲得超8個贊
這里有兩條線索表明您消耗了太多內存,并且操作系統正在強行殺死您的“流氓”進程。他們是:
被殺
無法分配內存
您可以通過在構建失敗結束時獲取 SSH 會話并使用dmesg
.?如果它給你一個“犧牲孩子”的消息,那么你就達到了內存限制,以至于操作系統被迫從內存中刪除一個進程。
您有多種選擇。我按照建議您喜歡它們的順序將它們放在這里:
通過更改 Go 程序來減少內存消耗
請 CircleCI 為您設置一個更大的 Docker 容器(這將是一個收費選項)。默認是4G,相信8G和16G都可以
交換到機器執行器(目前免費,可能會發生變化)。這為您提供了 8G 的 RAM,但是您失去了 Docker 方法的一些靈活性(例如,您必須使用幾個預設基礎映像之一)。

心有法竹
TA貢獻1866條經驗 獲得超5個贊
在這種情況下對我有用的是go test -p 1
告訴 Go 一次只運行一個編譯。
如果沒有它,Go 將運行你擁有的 CPU 數量,在 CircleCI 上默認是兩個。
- 2 回答
- 0 關注
- 185 瀏覽
添加回答
舉報
0/150
提交
取消