测试初期 Client VM 的延迟结果正常; 测试后期 Client VM 的延迟偶尔突增/连接失败,越后期超高延迟(比如 30 秒)出现越多;

问题分析

造成这一现象的根本原因很可能是 SNAT(Source NAT)数量过高。

什么是 SNAT 呢?

对于 ASM 虚拟机,出于可拓展性的考虑,云服务中每台虚拟机都隐藏在云服务面向公网的 VIP 之后,各自有自己的 DIP。

对于 ARM 虚拟机,默认会分配一个面向公网的 VIP 和一个面向内部的 DIP。用户可以自定义设置,不为 ARM 虚拟机分配公网 IP。

当这些未部署特定公网 IP 的虚拟机访问公网资源时,出站流量将通过 NAT 层(更改虚拟机的 DIP 和端口为面向公网的 VIP 和对应端口,以便流量被路由,否则虚拟机单凭 DIP 无法在公网中被路由)。

这个过程即 SNAT:更改源信息(源 IP 地址和源端口)。

SNAT 数量建议上限是多少?

出于整体性能考虑,Azure 为每个虚拟机预分配了 160 个源端口。虚拟机访问公网资源时, Azure 会为该会话分配这 160 个中可用的端口。如果同时有 160 个请求正在运行,第 161 个及之后的请求需等 Azure 分配了新的端口才能使用。

当用户的并发非常高时,Azure 分配新端口的速度可能不足以保障每个请求都能及时获得 Azure 分配的 SNAT 端口。未被分配到端口的请求就可能出现出站连接尝试失败 / 延迟高的情况。

解决方法

资源管理器模式

对于 ARM 部署的虚拟机,可以为它的网卡 NIC 配置公网 IP 通过 Portal 或 PowerShell 创建公网 IP,具体操作步骤可以参考官网:创建公共 IP 地址

在 Portal 上虚拟机对应的 "网络接口" 内, 点击IP 配置,配置对应的公共 IP 地址 即可。

经典模式

一般对此的解决方法是为这台高负载的机器配置独有的公网 IP —— 实例层级公共 IP(ILPIP)。

对于 ASM 部署的虚拟机,将创建的公网 IP 配置为虚拟机的 ILPIP:

ILPIP(Instance Level Public IP) 为用户虚拟机提供了一个独有的公网 IP,于是用户可用此 IP 直接访问虚拟机,出站流量也无需作 SNAT。

具体说明可参考官网:实例层级公共 IP(经典)概述

具体配置方法如下,具体参数请根据实际情况修改。

如何检索虚拟机的 ILPIP 信息:

若要查看虚拟机的 ILPIP 信息,请运行以下 PowerShell 命令,然后观察 PublicIPAddress 和 PublicIPName 的值:

PowerShell复制

Get-AzureVM-NameFTPInstance-ServiceNameFTPService

预期输出:

复制

DeploymentName  : FTPService

Name                : FTPInstance

Label              :

VM                  : Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVM

InstanceStatus              : ReadyRole

IpAddress                      : 100.74.118.91

InstanceStateDetails        :

PowerState                      : Started

InstanceErrorCode          :

InstanceFaultDomain        : 0

InstanceName                : FTPInstance

InstanceUpgradeDomain      : 0

InstanceSize                : Small

HostName                    : FTPInstance

AvailabilitySetName        :

DNSName                    : http://ftpservice888.chinacloudapp.cn/

Status                      : ReadyRole

GuestAgentStatus            :    Microsoft.WindowsAzure.Commands.ServiceManagement.Model.GuestAgentStatus

ResourceExtensionStatusList : {Microsoft.Compute.BGInfo}

PublicIPAddress                : 104.43.142.188

PublicIPName                : ftpip

NetworkInterfaces          : {}

ServiceName                : FTPService

OperationDescription        : Get-AzureVM

OperationId                : 568d88d2be7c98f4bbb875e4d823718e

OperationStatus            : OK

如何向现有的虚拟机配置 ILPIP

运行以下 PowerShell 命令(仅支持使用 Powershell 配置 ILPIP),下面的示例为 FTPInstance 这台虚拟机新建了一个名为 ftpip2 的 ILPIP:

复制

Get-AzureVM -ServiceName FTPService -Name FTPInstance | Set-AzurePublicIP -PublicIPName ftpip2 | Update-AzureVM

配置 ILPIP 是否会造成虚拟机重启?

用户可能担心此操作是否会造成虚拟机重启、业务中断等等。

配置 ILPIP 不会导致虚拟机重启,配置成功后 Cloud Service IP 和 ILPIP 都可以用来连接虚拟机。

ILPIP 能否被保留 / 设置为静态?

ILPIP 不可设置为静态。如有需要建议部署 ARM 的虚拟机,并设置虚拟机的 Public IP(VIP)为 Reserved IP。

统计现有的 ILPIP

ILPIP 单独计价,具体价格可以参考:IP 地址价格详情

每个订阅最多可以分配 5 个 ILPIP 地址。然而,查看订阅下已经使用了多少个 ILPIP 只能通过查询每一台虚拟机看是否有 PublicIP Address 项,过程比较费时。

具体查询的 PowerShell 命令如下:

PowerShell复制

$vm=Get-AzureVM-Namexxx-ServiceNamexxx

其中$vm.publicIPAddress即 ILPIP。 为便于查询某订阅下的所有 ILPIP,我们在 GitHub 中提供自动化获取订阅下所有 ILPIP 的脚本供用户使用,直接下载后在 PowerShell 中运行即可。

ILPIP 带来的安全问题

配置 ILPIP 后相当于直接将虚拟机暴露在公网,安全方面建议在虚拟机内部配置防火墙。 更多详细的安全策略解释可以参考:Microsoft 云服务和网络安全性,这里也提到了外围网络的安全概念和具体示例。

立即访问http://market.azure.cn

虚拟机压力测试延迟高的可能原因及 ILPIP 配置 / 查询脚本的更多相关文章

  1. laravel+Redis简单实现队列通过压力测试的高并发处理

    秒杀活动 在一般的网络商城中我们会经常接触到一些高并发的业务状况,例如我们常见的秒杀抢购等活动, 在这些业务中我们经常需要处理一些关于请求信息过滤以及商品库存的问题. 在请求中比较常见的状况是同一用户 ...

  2. 使用Jmeter进行压力测试结果偏差较大原因分析

    Apache软件基金会(ASF)是一家总部位于美国的非营利性慈善组织.ASF的所有产品都通过公共论坛的在线协作开发,并从美国境内的中央服务器分发.Jmeter是ASF的一款开源免费软件 ,在国内被很多 ...

  3. Jmeter接口测试+压力测试+环境配置+证书导出

    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要安 ...

  4. 压力测试+接口测试(工具jmeter)

      jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因 为jmeter是java开发的,所以运行的时候必须 ...

  5. Jmeter压力测试和接口测试

    jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要安 ...

  6. JMeter接口测试和压力测试

    JMeter接口测试和压力测试 JMeter可以做接口测试和压力测试.其中接口测试的简单操作包括做http脚本(发get/post请求.加cookie.加header.加权限认证.上传文件).做web ...

  7. 【转载】Jmeter接口测试+压力测试

     jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要 ...

  8. Jmeter接口测试+压力测试(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/github_27109687/artic ...

  9. 使用JMeter进行MySQL的压力测试

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 目录 前言 1. JMeter安装 2. 导入MyS ...

随机推荐

  1. float四舍五入保留一位小数点(坑)

    Float四舍五入保留一位小数点 public class Test {    public static void main(String[] args){        double data1  ...

  2. 《第一本Docker书》

    Docker简介 Docker依赖写时复制(copy-on-write),使修改应用程序非常迅速. Docker推荐单个容器只运行一个应用或进程,鼓励面向服务的架构和微服务架构. Docker的核心组 ...

  3. 在linux下实现mysql自动备份数据

    使用的系统为CentOS,mysql版本为5.6 备份功能主要利用以下功能实现: mysql命令中的mysqldump命令 linux下脚本编写 linux下crontab定时任务的使用 首先确定你要 ...

  4. 【转载】表单中 Readonly 和 Disabled 的区别

    今天写代码,遇到表单提交的问题,某个字段在不同的情况下,要传递不同的值进行赋值,试过一些方法都有些问题,后来请教前端同学,使用 disabled 这个属性终于搞定了问题,查到一篇讲解 readonly ...

  5. JDK7与JDK8中HashMap的实现

    JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry transient Entry<K,V>[] table; 我们向 HashMap 中所放置的 ...

  6. gpexpand分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由maxluo发表于云+社区专栏 一. gp扩容步骤 1.1 初始化机器 目标:新增加的机器需要初始化和已有机器环境一样. 具体包括不限 ...

  7. Jackson xml json

    public class XMLTest { private static XmlMapper xmlMapper = new XmlMapper(); private static ObjectMa ...

  8. Centos下安装最新版Mono并为windwos服务配置开机启动项

    一:安装Mono,此步骤参照官网 1:配置Yum仓库 #Centos 7yum install yum-utils rpm --import "http://keyserver.ubuntu ...

  9. winDBG排错小记

    去年底,公司一个上线了近一年的系统逐渐出现访问缓慢,操作超时的问题.本人使用winDBG工具对抓下来的内存映象进行了诊断,虽最后没有查出什么原因,但在过程中也学到了不少东西,现记录如下 一. “Fai ...

  10. mongodb索引--1亿条记录的查询从55.7秒到毫秒级别<补充版>

    从头开始,验证mongodb的索引的好处.(window7环境下) 下载mongodb服务器,并解压到d盘,并使用以下命令启动 mongod --dbpath D:\mongodb\data mong ...