本页面介绍了在您遇到 Compute Engine 使用问题时可能有帮助的提示。
如需有关排查特定问题的帮助,请参阅以下某个部分:
- 如需了解排查实例常规问题(例如实例无法启动)的步骤,请参阅常规问题排查。
- 如需了解排查 Windows 实例问题的步骤,请参阅排查 Windows 实例的问题。
查看不同的响应格式
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 中的支持和操作信息中心。 因此,建议使用不会透露任何敏感信息的资源名称。
与互联网通信
只有在同时满足以下两个条件时,实例才可以直接访问互联网:
- 实例具有外部 IP 地址。
- 实例的 VPC 网络使用下一个跃点为默认互联网网关的默认路由。
实例还可以通过 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 字节。