虚拟机压力测试延迟高的可能原因及 ILPIP 配置 / 查询脚本
测试初期 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 配置 / 查询脚本的更多相关文章
- laravel+Redis简单实现队列通过压力测试的高并发处理
秒杀活动 在一般的网络商城中我们会经常接触到一些高并发的业务状况,例如我们常见的秒杀抢购等活动, 在这些业务中我们经常需要处理一些关于请求信息过滤以及商品库存的问题. 在请求中比较常见的状况是同一用户 ...
- 使用Jmeter进行压力测试结果偏差较大原因分析
Apache软件基金会(ASF)是一家总部位于美国的非营利性慈善组织.ASF的所有产品都通过公共论坛的在线协作开发,并从美国境内的中央服务器分发.Jmeter是ASF的一款开源免费软件 ,在国内被很多 ...
- Jmeter接口测试+压力测试+环境配置+证书导出
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要安 ...
- 压力测试+接口测试(工具jmeter)
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因 为jmeter是java开发的,所以运行的时候必须 ...
- Jmeter压力测试和接口测试
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要安 ...
- JMeter接口测试和压力测试
JMeter接口测试和压力测试 JMeter可以做接口测试和压力测试.其中接口测试的简单操作包括做http脚本(发get/post请求.加cookie.加header.加权限认证.上传文件).做web ...
- 【转载】Jmeter接口测试+压力测试
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要 ...
- Jmeter接口测试+压力测试(转)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/github_27109687/artic ...
- 使用JMeter进行MySQL的压力测试
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 目录 前言 1. JMeter安装 2. 导入MyS ...
随机推荐
- Maven install [WARNING] The artifact aspectj:aspectjrt:jar:1.5.4 has been relocated to org.aspectj:aspectjrt:jar:1.5.4
一.背景 最近在给项目打包的时候,在控制台老是出现一行警告:[WARNING] The artifact aspectj:aspectjrt:jar:1.5.4 has been relocated ...
- EventProcessor与WorkPool用法--可处理多消费者
单一的生产者,消费者有多个,使用WorkerPool来管理多个消费者: RingBuffer在生产Sequencer中记录一个cursor,追踪生产者生产到的最新位置,通过WorkSequence和s ...
- spring security xml配置详解
security 3.x <?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns= ...
- geo-经纬度计算
经纬度计算, 本质上是球面三角函数的应用, 将数学公式转换为代码的过程, 站在前人的肩膀上, 自己又补充了一点: package com.iwhere.easy.travel.tool; public ...
- C#中将String类型保存到本地文件的方法
今天刚刚遇到,要在WinForm中把一个xml保存到本地, 由于之前是学习java的,一时间还真不知道怎么写, 没想到C#居然那么方便,就3句代码就实现了我要的功能: StreamWriter sw ...
- Solidity字符串类型
字符串可以通过""或者''来表示字符串的值,Solidity中的string字符串不像C语言一样以\0结束,比如abcd这个字符串的长度就为我们所看见的字母的个数,它的长度为4. ...
- PTA (Advanced Level) 1003 Emergency
Emergency As an emergency rescue team leader of a city, you are given a special map of your country. ...
- Python高级特性: 函数编程 lambda, filter,map,reduce
一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...
- 页面出现Incorrect string以及数据库内容乱码
我在制作 (www.helpqy.com) 的时候遇到了页面报错Incorrect string的问题,我使用的是mysql,数据表中有很多中文内容,最后发现在安装mysql的时候需要选择defaul ...
- C# Code First 配置
前言 所谓code first,是代码优先,而不是传统的数据库优先. code first的好处多多,可不用考虑数据库,只考虑面向对象.下面我们介绍一下code first的配置. 下一篇文章地址:C ...