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

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

Cloud Run:為什么我的實例需要這么多 RAM?

Cloud Run:為什么我的實例需要這么多 RAM?

Go
SMILET 2022-05-05 18:05:33
我有一個在 400MB SQLite 文件上運行 SQL 查詢的 Golang 進程。我正在使用帶有連接字符串的https://github.com/mattn/go-sqlite3 :file:mydb.sqlite?mode=ro&_journal=DELETE在我的 Docker 開發機器上運行時,它只需要 20MB 的 RAM,但在 Google Run 上,任何小于 512MB 的實例都將返回 HTTP 代碼 500,并memory exceeded在日志中有限制。docker diff x顯示未修改 DB 文件(我認為這會導致 gVisor 將整個二進制 SQLite db 文件復制到 RAM 以對其進行修改)。docker 鏡像是如何構建的我正在使用源代碼將 SQLite DB 文件復制到圖像中:FROM golang:latest...COPY . /go/src/api我的 Golang 文件中有一個全局變量:var db *sqlx.DB這在主 fn 中設置,之前ListenAndServe:conStr := fmt.Sprintf("file:%s?mode=ro&_journal=DELETE", *fileName)dbConn, err := sqlx.Open("sqlite3", conStr)db = dbConn我在 HTTP 請求中查詢數據庫:err := db.Selectv(&outDataSet, "SELECT...", arg1, arg2)為什么這一定是 Cloud Run 環境的問題docker stats在本地運行時永遠不會超過 20MB。限制docker run為 20MB RAM 在我的開發機器上也可以正常運行:docker run \  --memory=20m \  --memory-swap=20m \Cloud Run“容器內存分配”指標也遠低于 128M:https://console.cloud.google.com/monitoring/metrics-explorer
查看完整描述

2 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

根據官方文檔:

配置內存限制

超出允許的內存限制的 Cloud Run 容器實例將被終止。

以下內容計入容器實例的可用內存:

a.運行應用程序可執行文件(因為可執行文件必須加載到內存中)

b.在您的應用程序進程中分配內存

c.將文件寫入文件系統

已部署容器映像的大小不計入可用內存。

另外我建議考慮:

您的容器實例是否超出內存?

您的容器實例可能超出了可用內存。要確定是否是這種情況,請在 varlog/system 日志中查找此類錯誤。如果實例超出可用內存,請考慮增加內存限制。

請注意,Cloud Run 容器實例在寫入本地文件系統的文件計入可用內存的環境中運行。這還包括未寫入 /var/log/* 或 /dev/log 的任何日志文件。

您的容器文件系統似乎正在使用內存。


查看完整回答
反對 回復 2022-05-05
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

在 Cloud Run(全托管)環境中,磁盤存儲是一個內存文件系統。關聯


查看完整回答
反對 回復 2022-05-05
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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