有关使用 Compute Engine 的一般提示


本页面介绍了在您遇到 Compute Engine 使用问题时可能有帮助的提示。

如需有关排查特定问题的帮助,请参阅以下某个部分:

查看不同的响应格式

Google Cloud CLI 通过 REST API 调用执行其大部分操作。格式整齐的结果仅显示任何特定命令返回的最重要的信息。如需查看不同的响应格式,请使用 --format 标志,从而以不同的输出格式(包括 jsonyamltext)显示响应。例如,如需查看 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 或基于实例的代理进行连接来间接访问互联网。如需了解其他注意事项,包括防火墙规则配置,请参阅互联网访问要求

空闲连接

Google Cloud VPC 网络会针对具有连接概念(例如 TCP)的 IP 协议实现 10 分钟的连接跟踪。这意味着,只要在过去 10 分钟内至少发送或收到一个连接的数据包,就允许与建立的连接关联的入站数据包。如果在 10 分钟或更长时间内未收到或发送连接的数据包,则系统会移除闲置连接的跟踪条目。移除连接的跟踪条目后,Google Cloud 在至少发送了一个新出站数据包之前不允许其他入站数据包。此连接跟踪适用于所有来源和目的地,即内部和外部 IP 地址

如需阻止闲置连接,请执行以下操作:

  • 将操作系统 TCP keep-alive 参数设置为不超过 10 分钟的时间范围。这可确保在该时间范围内至少发送一个数据包。

  • 确保打开 TCP 连接的应用在启用了 SO_KEEPALIVE 选项的情况下执行此操作。

以下示例演示了如何设置时间间隔值为一分钟的操作系统 TCP keep-alive 参数。请参阅应用或软件库的文档,确定如何将其配置为使用 SO_KEEPALIVE

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 文件中。

如需了解详情,请参阅 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 参考文档

与串行控制台进行交互

您可以启用对实例串行控制台的交互式访问,以便通过串行控制台连接实例并排查实例问题。

要了解详情,请参阅与串行控制台进行交互

避免从自定义映像构建的实例的数据包碎片化

对于 Linux 映像和 Windows Server 映像,VPC 网络的默认最大传输单元 (MTU) 为 1460 字节。不过,网络 MTU 可以更改。如需了解详情,请参阅 VPC 文档中的最大传输单元概览

创建通过 UDP 套接字与 Compute Engine 实例通信的客户端应用时,如果您将 UDP 数据报数据的大小上限设置为比网络 MTU 少 28 字节,则可以避免碎片化。例如,如果网络的 MTU 为 1460 字节,则您可以通过每个数据包最多发送 1432 字节的 UDP 数据,而无需碎片化。如果网络的 MTU 为 1500 字节,则您可以最多发送 1472 字节的 UDP 数据,而无需碎片化。28 字节用于 IPv4 数据包标头(20 字节)和 UDP 数据报标头(8 字节)。 您可以将网络的 MTU 设置为最多 8896 字节。