亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang CircleCI 2.0 測試失敗并發出信號:被殺死

Golang CircleCI 2.0 測試失敗并發出信號:被殺死

Go
30秒到達戰場 2023-03-29 15:40:17
我正在遷移到 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 方法的一些靈活性(例如,您必須使用幾個預設基礎映像之一)。


查看完整回答
反對 回復 2023-03-29
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

在這種情況下對我有用的是go test -p 1告訴 Go 一次只運行一個編譯。

如果沒有它,Go 將運行你擁有的 CPU 數量,在 CircleCI 上默認是兩個。


查看完整回答
反對 回復 2023-03-29
  • 2 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號