GSP045
概览
在本实操实验中,您将了解一些真实场景,重新创建环境,并动手优化一些性能欠佳的网络。
值得尝试的是将不同实例进行横向对比,就像问题排查应用场景那样,通过这种方式,您既可以验证优化效果,又能熟练掌握那些用于提升自家系统性能的关键步骤。
本实验改编自 Colt McAnlis 的博文:Core Count and the Egress problem(核心数与出站流量问题)和 Internal IP vs External IP(内部 IP 与外部 IP 对比)。Colt 在 Medium 上发布博客,分享关于 Google Cloud 网络性能的见解。
目标
- 如何使用开源工具测试网络连接和性能
- 如何使用开源工具检查网络流量
- 机器大小如何影响网络性能
前提条件
- 具备 Google Cloud 服务基础知识(建议先完成 Google Cloud 基础知识中的实验,以获得最佳学习效果)
- 具备 Google Cloud 网络和 TCP/IP 基础知识(建议先完成“Google Cloud 中的网络”课程中的前几个实验,以获得最佳学习效果)
- 具备 Unix/Linux 命令行基础知识
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。右侧是实验设置和访问权限面板,其中包含以下内容:
-
打开 Google Cloud 控制台按钮
- 您在本实验中必须使用的临时凭证(用户名和密码)
- 帮助您逐步完成该实验所需的其他信息(如果需要)
请注意,实验计时器位于页面顶部附近,将显示剩余时间。
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:可以将这些标签页分别放在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在实验设置和访问权限面板中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在实验设置和访问权限面板中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭证。请勿使用您的 Google Cloud 账号凭证。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
依次点击进入后续页面:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重身份验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
本实验的目标是展示核心数与吞吐量之间的关系,因此实验中已预先构建了 6 个实例。它们是在您开始实验时创建的。
- 在 Cloud 控制台中,前往导航菜单 > Compute Engine > 虚拟机实例,查看您的实例:

注意:您的实例所属的区域和可用区可能与屏幕截图中的示例有所不同。
连接测试
进行快速连接测试,确保一切运行正常。
-
在控制台中点击 instance-1 名称旁边的 SSH 按钮,通过 SSH 连接到该实例。
-
在新的 shell 窗口中,对另一个实例执行 ping 操作,并运行以下命令,将 <external ip address of instance-2> 替换为 instance-2 的外部 IP 地址:
ping -c 5 <external ip address of instance-2>
输出示例:
student-00-aafd1bd9c185@instance-1:~$ ping -c 5 35.194.158.169
PING 35.194.158.169 (35.194.158.169) 56(84) bytes of data.
64 bytes from 35.194.158.169: icmp_seq=1 ttl=76 time=1.89 ms
64 bytes from 35.194.158.169: icmp_seq=2 ttl=76 time=0.409 ms
64 bytes from 35.194.158.169: icmp_seq=3 ttl=76 time=0.542 ms
64 bytes from 35.194.158.169: icmp_seq=4 ttl=76 time=0.557 ms
64 bytes from 35.194.158.169: icmp_seq=5 ttl=76 time=0.559 ms
--- 35.194.158.169 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4001ms
rtt min/avg/max/mdev = 0.409/0.792/1.894/0.554 ms
- 对另一个实例执行 ping 操作。将
<external ip address of instance-3> 替换为 instance-3 的外部 IP 地址,并对其执行 ping 操作:
ping -c 5 <external ip address of instance-3>
输出示例:
student-00-aafd1bd9c185@instance-1:~$ ping -c 5 35.194.187.75
PING 35.194.187.75 (35.194.187.75) 56(84) bytes of data.
64 bytes from 35.194.187.75: icmp_seq=1 ttl=64 time=1.59 ms
64 bytes from 35.194.187.75: icmp_seq=2 ttl=64 time=0.336 ms
64 bytes from 35.194.187.75: icmp_seq=3 ttl=64 time=0.338 ms
64 bytes from 35.194.187.75: icmp_seq=4 ttl=64 time=0.302 ms
64 bytes from 35.194.187.75: icmp_seq=5 ttl=64 time=0.270 ms
--- 35.194.187.75 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.270/0.568/1.596/0.514 ms
一切正常,继续!
检查防火墙规则
本实验还创建了防火墙规则。
- 若要查看这些规则,请前往导航菜单 > VPC 网络 > 防火墙,然后点击
iperftesting 防火墙。
防火墙规则 iperftesting 使用以下配置:
| 字段 |
值 |
注释 |
| 名称 |
iperftesting |
新规则名称 |
| 目标 |
网络中的所有实例 |
|
| 来源 IP 地址范围 |
0.0.0.0/0 |
防火墙允许来自互联网上所有 IP 地址的流量。 |
| 协议和端口 |
tcp:5001; udp:5001 |
|
| 流量方向 |
入站 |
|
| 对匹配项执行的操作 |
允许 |
|
现在,您可以开始进行实验了。
应用场景 1:网络和 Compute Engine 核心数
在第一个场景中,您将了解所用机器的大小如何影响可测量的吞吐量。
Dobermanifesto 是一个专为宠物打造的视频微博网络。用户可以从全球各地上传动物类视频,并将其发送到世界任何角落,供他人观看和体验。
在与 Compute Engine 后端往返传输数据时,他们发现实际带宽并没有达到预期:

任务 1. 重现行为
为了尝试重现此行为,我们在同一可用区中创建了两个实例,并在它们之间运行了 100 次 iperf 测试。

这次性能表现甚至更差!很明显,测试出了问题。我们需要该公司提供更多信息,以及更详细的重现步骤。
现在,您将设置场景。
Dobermanifesto 的环境
-
返回到 Compute Engine 控制台中的虚拟机实例列表。
-
通过 SSH 连接到 instance-1(1 个 vCPU、3.75 GB),然后运行以下命令,设置 iperf“接收器”:
iperf -s
- 然后,通过 SSH 连接到
instance-2(1 个 vCPU、3.75 GB),并生成指向 instance-1 的 iperf 流量:
iperf -c <external ip address of instance-1>
输出示例:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 35.225.180.44
------------------------------------------------------------
Client connecting to 35.225.180.44, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.20.0.4 port 56330 connected with 35.225.180.44 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0000-10.0010 sec 4.66 GBytes 4.00 Gbits/sec
- 返回到
instance-1,并输入 CTRL + C,以终止接收器。
测试环境
-
返回到 Compute Engine 控制台,打开另一个 SSH 窗口,连接到 instance-6(1 个 vCPU、0.6 GB,e2-micro)。
-
运行以下命令,将其设置为“接收器”:
iperf -s
输出示例:
student-00-aafd1bd9c185@instance-6:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
- 在
instance-2 的 SSH 窗口中,测试与 instance-6 的连接:
iperf -c <internal ip address of instance-6>
输出示例:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.40.0.7
------------------------------------------------------------
Client connecting to 10.40.0.7, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.5 port 54029 connected with 10.40.0.7 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.29 GBytes 1.96 Gbits/sec
- 返回到
instance-6,并输入 CTRL + C,以终止接收器。
发生了什么情况?带宽似乎增加了。您的情况可能也是如此,但也可能减少了。
在下一部分中,您将了解带宽如何受总核心数的限制,在核心数处于这个较小范围(核心数为 1)时,带宽永远不会超过 2 Gbps 左右。因此,网络速度较慢且带宽受限,这与 Dobermanifesto 的情况类似。如果您稍后使用具有 4 个 CPU 的机器进行测试,数值会更大。
核心数与 Gb/秒相关
为什么两次测试的结果差异不大?Compute Engine 文档中指出:
来自虚拟机的传出或出站流量受限于网络出站吞吐量上限。这些上限取决于虚拟机实例具有的 vCPU 数。为获得最佳性能,每个核心都存在 2 Gbps 的上限。每个额外的核心都可增加网络上限,理论上每个虚拟机不能超过 16 Gbps
这意味着,网络中的虚拟 CPU 越多,您获得的网络吞吐量就越高。
为了探究这在实践中具体表现如何,我们在同一可用区内设置了具有不同核心数的对照组,并在这些组之间运行了 1,000 次 iperf 测试。

随着核心数的增加,平均吞吐量和最大吞吐量也会随之增加。即使是这种简单的测试,您也可以看到高端机器存在 16 Gbps 的硬性限制。
注意:如果您使用多个线程(8 个左右)运行 iperf 测试,吞吐量可以超过 10 Gbps;如果使用 e2-standard-16 或更高配置的机器,吞吐量最高可达 16 Gbps 左右。在本实验环境中,我们没有这种规格的机器,但接下来,我们会使用多个线程进行测试。
此外,N2、N2D、C2 或 C2D 系列中还提供更高规格的虚拟机,支持选择层级 1 高带宽配置,带宽可达 50-100 Gbps。
任务 2. 如何提升性能
Dobermanifesto 的网络采用具有 1 个 vCPU 的机器。增加核心数可能有助于 Dobermanifesto 获得更佳性能。现在是时候验证这个推测了。
- 通过 SSH 连接到
instance-3(4 个 vCPU、15 GB 内存),然后运行以下命令:
iperf -s
输出示例:
student-00-aafd1bd9c185@instance-3:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
- 通过 SSH 连接到
instance-4(4 个 vCPU、15 GB 内存):
iperf -c <internal ip address of instance-3>
输出示例:
student-00-aafd1bd9c185@instance-4:~$ iperf -c 10.40.0.2
------------------------------------------------------------
Client connecting to 10.40.0.2, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.4 port 54081 connected with 10.40.0.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 8.93 GBytes 7.67 Gbits/sec
- 现在,使用 4 个线程再试一次:
iperf -c <internal ip address of instance-3> -P4
- 使用 8 个线程:
iperf -c <internal ip address of instance-3> -P8
- 返回到
instance-3,并输入 CTRL + C,以终止接收器。
在这些实验中,服务器和客户端均配置为 4 个 vCPU,速度大幅提升。传输速率增加了 6.64 GB,带宽增加了 5.71 Gbps。使用多个线程后,性能可以达到该核心数的上限。
- 继续使用
instance-5 进行测试,这是一个性能更高且具有 4 个 vCPU 的机器,实例类型为“highcpu-4”。
此实例类型的 CPU 速度更快,但内存容量较小。您看到了哪些不同之处?如果使用多个线程呢?
现在,Dobermanifesto 团队需要确定采用哪种方案。在分析 CPU 使用情况并查看价格信息后,他们决定采用 e2-standard-4 机器,这让他们的平均吞吐量提升到之前的近 4 倍,而且成本比 e2-standard-8 机器更低。
改用更高配置的机器还有一个好处:实际运行频率降低了。事实证明,他们的机器过去需要耗费大量时间保持唤醒状态,仅仅是为了传输数据。采用更高配置的机器后,他们实例的停机时间增加了,这使得负载均衡器能够每天减少实例总数。因此,一方面,他们需要为更高配置的机器付费,但另一方面,他们每月使用的核心小时数会减少。
一旦性能表现直接影响利润,就需要权衡各类微妙而复杂的取舍关系。
应用场景 2:使用内部 IP 的 Google Cloud 网络
在下一个示例中,您将使用 iperf 测试吞吐量速度。您需要将一台机器设置为服务器,然后让其他机器连接到该服务器并对比测试结果。
Gecko Protocol 是一家 B2B 公司,提供专为游戏和其他实时图形系统构建的自定义轻量级网络协议。该公司发现,负责传输和转码大型视频和图形文件的后端机器的吞吐量低于预期。
以下是他们的基准 iperf 测试结果:
------------------------------------------------------------
Client connecting to 104.155.145.79, TCP port 5001 TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.128.0.3 port 53504 connected with 104.155.145.79 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.03 GBytes 884 Mbits/sec
在尝试重现该测试时,尽管网络设置完全一致,但得出的测试结果却截然不同:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.128.0.2
------------------------------------------------------------
Client connecting to 10.128.0.2, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.128.0.3 port 38978 connected with 10.128.0.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.27 GBytes 1.95 Gbits/sec
1.95 GB/秒远高于 Gecko Protocol 在图表中看到的数值。究竟是怎么回事?
现在,我们来重现这个场景。
- 在控制台中,通过 SSH 连接到
instance-1,并设置 iperf 接收器:
iperf -s
输出示例:
student-00-aafd1bd9c185@instance-1:~$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 128 KByte (default)
------------------------------------------------------------
- 通过 SSH 连接到
instance-2,并检查外部 IP 地址的连接:
iperf -c <external ip address of instance-1>
输出示例:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 35.201.145.135
------------------------------------------------------------
Client connecting to 35.201.145.135, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.8 port 58691 connected with 35.201.145.135 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.36 GBytes 1.16 Gbits/sec
在与 Gecko Protocol 进一步沟通后,我们发现他们之前一直使用外部 IP 来连接机器,而我们的测试使用的是内部 IP。当机器处于同一网络中时,通过内部 IP 进行连接可以获得更高的吞吐量。
- 现在,检查与内部地址的连接:
iperf -c <internal ip address of instance-1>
输出示例:
student-00-aafd1bd9c185@instance-2:~$ iperf -c 10.40.0.5
------------------------------------------------------------
Client connecting to 10.40.0.5, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.8 port 42950 connected with 10.40.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.26 GBytes 1.94 Gbits/sec
请对比观察这两组不同的传输速率和带宽速度。在本例中,改用内部 IP 地址后,传输速率提升了 0.9 GB,带宽则增加了 0.78 Gbps。您刚刚用事实证明,内部连接的速度确实更快。
根据您在解决 Dobermanifesto 问题时所学到的知识,使用更高配置的机器能否进一步提高网络速度?要知道,instance-2 只有 1 个 vCPU。如果机器配置更高一些,连接速度会有多快?如果配置大幅提升呢?继续使用内部 IP 地址进行测试(如果有时间,也可以测试外部 IP 地址)。
具有 4 个 vCPU 的机器
- 通过 SSH 连接到
instance-3,并使用内部 IP 地址测试连接:
iperf -c <internal ip address of instance-1>
输出示例(您的结果可能有所不同):
student-00-aafd1bd9c185@instance-3:~$ iperf -c 10.40.0.5
------------------------------------------------------------
Client connecting to 10.40.0.5, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.6 port 39115 connected with 10.40.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 4.53 GBytes 3.89 Gbits/sec
具有 4 个高 CPU 的机器
- 通过 SSH 连接到
instance-5,并使用内部 IP 地址测试连接:
iperf -c <internal ip address of instance-1>
输出示例:
student-00-aafd1bd9c185@instance-5:~$ iperf -c 10.40.0.5
------------------------------------------------------------
Client connecting to 10.40.0.5, TCP port 5001
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.40.0.3 port 39736 connected with 10.40.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 10.3 GBytes 8.84 Gbits/sec
这确实提高了吞吐率。
看来 Gecko Protocol 同样需要考虑哪种核心数才是最优选。通过这次小小的调试,他们的视频和图形数据传输速率提升到了之前的约 14 倍。考虑到他们的产品是基于高性能计算场景下的性能后端服务构建的,这一提升幅度确实惊人。
任务 3. 在您自己的环境中进行测试
本实验不涉及如何测试您自己的系统,但您可以参考以下额外信息,以便在实验结束后继续探索。如需详细了解如何测试自己的网络,请参阅使用 iPerf 测试网络吞吐量一文。
如果您有时间并想设置虚拟机进行测试,请尽管尝试。创建虚拟机时,请务必使用“iperftest”防火墙规则和标记。测试内部 IP 地址和外部 IP 地址。
用于测试自家网速的设置
-
在控制台中,前往导航菜单 > VPC 网络 > 防火墙。
-
点击创建防火墙规则。使用以下配置创建防火墙规则:
| 字段 |
值 |
注释 |
| 名称 |
iperf-testing |
新规则名称 |
| 目标 |
网络中的所有实例 |
|
| 来源 IP 地址范围 |
0.0.0.0/0 |
防火墙允许来自互联网上所有 IP 地址的流量。 |
| 流量方向 |
入站 |
|
| 对匹配项执行的操作 |
允许 |
|
| 协议和端口 |
tcp:5001; udp:5001 |
|
- 点击创建。
点击“检查我的进度”以验证是否完成了以下目标: 创建防火墙规则
常见做法是尽可能让工作负载接近 100%,但这会使磁盘几乎没有空间进行碎片整理等操作。
使用率在 90-93% 属于正常范围,但如果达到 98%,性能就会下降,因为这会导致大量的资源争用。
在测试过程中,如果 IO 性能有所下降,请查看节流计数器。如果并未发生节流,请检查 CPU 使用率。如果该值很高,那问题就在这里。
任务 4. 如果时间充足
在实验界面右侧的“学生资源”部分,您可以找到与本实验相关的视频链接。非常值得一看!

恭喜!
恭喜!在本实验中,您学习了如何使用开源工具测试网络连接和性能,以及机器大小如何影响网络性能。
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2026 年 7 月 7 日
上次测试实验的时间:2026 年 7 月 7 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。