使用 Compute Engine 的一般提示

本頁說明 Compute Engine 使用問題的實用提示。

如需協助疑難排解特定的問題,請參閱以下其中一節:

檢視不同的回應格式

Google Cloud CLI 會發出 REST API 呼叫,執行大部分的動作。準確列出的結果中只會顯示特定指令傳回的最重要資訊。如要查看不同的回應格式,請使用 --format 旗標,以不同的輸出格式顯示回應,包括 json、yaml 和 text。舉例來說,如要以 JSON 格式查看執行個體清單,請使用 --format json:

gcloud compute instances list --format json

查看 gcloud compute 記錄檔

gcloud CLI 會在 $HOME/.config/gcloud/logs 的記錄檔中建立及儲存記錄,您可以查詢該記錄檔。如要查看 Linux 作業系統中的最新記錄檔,請執行下列指令:

$ less $(find ~/.config/gcloud/logs | sort | tail -n 1)

記錄檔中包含您使用 gcloud CLI 工具發出的所有要求和相關回應資訊。

如要自動清除 gcloud CLI 建立的記錄檔,請使用 max_log_days 屬性,設定刪除記錄檔前保留的天數上限。預設值為 30 天。如果將這個屬性值設為 0,就會關閉記錄垃圾回收功能,且不會刪除記錄檔。

 gcloud config set core/max_log_days DAYS_TO_RETAIN_LOGS

停用 gcloud CLI 檔案記錄:

檔案 $HOME/.config/gcloud/logs 會佔用本機檔案系統的空間。 產生的記錄檔數量可能會超出本機檔案系統的空間大小,導致下列問題:

  • 執行個體的空間使用率達到 100%。
  • 無法執行 gcloud CLI 記錄指令,因為本機檔案系統沒有足夠空間建立新檔案。

如要變更 gcloud CLI 行為並停用檔案記錄功能,請使用 disable_file_logging 屬性:

 gcloud config set core/disable_file_logging True

挑選資源名稱

在選擇資源名稱時,請留意這些好記名稱可能會顯示在 Compute Engine 中的支援和操作資訊主頁。因此,我們不建議您在資源名稱中使用任何機密資訊。

與網際網路通訊

只有在符合下列兩項條件時,執行個體才具有直接網際網路存取權:

執行個體也可以透過 Cloud NAT 或執行個體型 Proxy 連線,間接存取網際網路。如需其他注意事項,包括防火牆規則設定,請參閱「網際網路存取需求」。

閒置連線

Google Cloud 網路元件不會無限期保持閒置連線開啟。為避免連線中斷,請考量下列元件如何處理閒置連線:

如要防止閒置的 TCP 連線遭到捨棄,可以設定 TCP 保持運作,藉由定期傳送封包 (探測) 來重設閒置逾時,讓連線保持有效:

  • 請確認用戶端或伺服器應用程式會使用 SO_KEEPALIVE socket 選項建立通訊端。請參閱應用程式或軟體程式庫的說明文件,瞭解如何使用 SO_KEEPALIVE 選項開啟通訊端。

  • 設定下列 TCP 存留信號參數:

    • 閒置時間,代表序列中最後一個非存活封包與第一個存活探查之間必須經過的時間。

    • 保持運作間隔,代表每次 TCP 保持運作探測之間的時間。

    • keepalive 探測:代表連線遭捨棄前,在序列中傳送的未確認 TCP 存活探測總數。

用戶端或伺服器應用程式可以使用 TCP_KEEPIDLE、TCP_KEEPINTVL 和 TCP_KEEPCNT 等通訊端選項設定 TCP 存留參數,也可以為作業系統設定 TCP 存留參數。

以下範例說明如何為作業系統設定 60 秒的閒置時間:

Linux


執行下列指令:

$ sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5

如要確保設定在重新啟動後仍繼續有效,請將設定新增至 /etc/sysctl.conf 檔案。這些核心參數適用於 IPv4 和 IPv6,即使名稱中含有 ipv4 也是如此。

詳情請參閱「Linux TCP Keepalive HOWTO」。

macOS


執行下列指令:

$ sudo sysctl -w net.inet.tcp.always_keepalive=1 net.inet.tcp.keepidle=60000 net.inet.tcp.keepinit=60000 net.inet.tcp.keepintvl=60000

Windows


在登錄路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ 下方,使用 DWORD 資料類型新增下列設定,或編輯現有設定的值:

KeepAliveInterval: 1000
KeepAliveTime: 60000
TcpMaxDataRetransmissions: 10

以其他 SSH 使用者的身分存取 Compute Engine

根據預設,gcloud compute 指令列工具會使用 $USER 變數,將使用者新增至 /etc/passwd 檔案,以便透過 SSH 連線至執行個體。您可以在執行 gcloud compute ssh 指令時以 --ssh-key-file PRIVATE_KEY_FILE 旗標指定其他使用者。例如:

gcloud compute ssh example-instance --ssh-key-file my-private-key-file

詳情請參閱gcloud參考文件。

與序列主控台互動

您可以啟用對執行個體序列主控台的互動式存取權,這樣就能透過序列主控台建立連線及解決執行個體問題。

詳情請參閱「使用序列控制台進行疑難排解」。

避免透過自訂映像檔建立的執行個體發生封包分段情況

虛擬私有雲網路的預設最大傳輸單位 (MTU) 為 1460 個位元組,適用於 Linux 映像檔和 Windows Server 映像檔。不過,網路 MTU 可以變更。詳情請參閱虛擬私有雲說明文件中的「最大傳輸單位總覽」。

建立透過 UDP 通訊端與 Compute Engine 執行個體通訊的用戶端應用程式時,如果將 UDP 資料包資料的最大大小設為比網路 MTU 少 28 個位元組,即可避免片段化。舉例來說,如果網路的 MTU 為 1460 位元組,您最多可以傳送 1432 位元組的 UDP 資料,且不會發生封包片段化。如果網路的 MTU 為 1500 位元組,您最多可以傳送 1472 位元組的 UDP 資料,不會發生封包片段化。這 28 個位元組用於 IPv4 封包標頭 (20 個位元組) 和 UDP 資料報標頭 (8 個位元組)。您可以將網路的 MTU 設為最多 8896 個位元組。

效能和 CPU 診斷

如果應用程式在現代 CPU 平台上發生非預期的延遲尖峰或當機情形,可能表示 CPU 匯流排鎖定。如果對未對齊的記憶體執行不可分割的作業,就會發生這類問題。

如要找出問題,請查看序列埠輸出內容中的下列記錄項目:x86/split lock detection: #DB: <process_name>/<pid> took a bus_lock trap at address: 0x<address>。

序列控制台輸出內容可偵測硬體層級事件,例如 CPU 匯流排鎖定陷阱,這類事件表示記憶體作業未對齊,可能會降低系統效能。

詳情請參閱「排解 CPU 匯流排鎖定問題」。