草庐IT

sockets - Azure VM TCP 空闲超时

coder 2023-09-19 原文

我在 Azure VM 上设置 FTP 服务器时遇到问题。 在正常使用中,服务器运行良好。通过被动 FTP 连接传输大文件会出现问题。

设置

FTP-Server 软件是一个 FileZilla 服务器。 Azure VM 终结点、Windows 防火墙和 Filezilla 配置为使用端口 10000-10009 进行被动连接。 客户端是第 3 方设备。

问题

在持续时间超过 4 分钟的大文件传输中,连接会出现空闲超时。

我找到了一个 Microsoft 博客条目,其中写道:

“当 FTP 传输大文件时,传输耗时可能会超过 4 分钟,特别是如果 VM 大小为 A0。任何时候文件传输超过 4 分钟,Azure SLB 都会使空闲 TCP 超时/21 连接,这会导致在传输所有数据后干净地完成 FTP 传输的问题。[..] 基本上,FTP 使用 TCP/21 来设置所有内容并开始传输数据。数据传输发生在另一个端口。TCP/21 连接在另一个端口上传输期间空闲。传输完成后,FTP 尝试在 TCP/21 连接上发送数据以完成传输,但 SLB 发送 TCP而是重置。”

现在...对于我的第 3 方客户端,是否无法将其设置为发送 TCP keepalive 命令以避免空闲超时。

问题

如何告诉 Azure VM 在 4 分钟后不要关闭 idel TCP 连接?

我什至不明白为什么会这样,因为这违反了 TCP 规范(RFC 5382 使其在正常情况下特别清楚其 2h 4m)。换句话说,过早丢弃空闲连接的 Azure 不能用于长时间的 FTP 传输。

请帮忙!

问候

史蒂芬

最佳答案

我找到了两个解决方案!

1. 可以将 VM 端点的超时设置为最长 30 分钟。

执行此操作的 Powershell 命令是:

> Get-AzureVM -ServiceName "MyService"-Name "MyVM"|设置 AzureEndpoint -名称“MyEndpoint”-IdleTimeoutInMinutes 30 |更新-AzureVM

更多信息 here .

2.创建ILIP(实例级IP)

您可以创建一个 ILIP 来绕过 VM 网络服务端点层。执行此操作的 PowerShell 命令是:

Get-AzureVM -ServiceName “MyService” -Name “MyVM” |设置 AzurePublicIP -PublicIPName "MyNewEndpoint"|更新-AzureVM

更多信息 here .

关于sockets - Azure VM TCP 空闲超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33692173/

有关sockets - Azure VM TCP 空闲超时的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  3. ruby-on-rails - Rails 优雅地处理超时 session ? - 2

    使用rails4,ruby2。我在rails配置中为我的cookiesession设置了30分钟的超时时间。问题是,如果我转到表单,让session超时,然后提交表单,我会收到此ActionController::InvalidAuthenticityToken错误。如何在Rails中优雅地处理这个错误?比如说,重定向到登录屏幕? 最佳答案 在您的ApplicationController:rescue_fromActionController::InvalidAuthenticityTokendoredirect_tosome_p

  4. Ruby 在 n *milli* 秒后超时一段代码 - 2

    在Ruby中,我需要在n毫秒秒后暂停一段代码的执行。我知道RubyTimeout库支持秒的超时:http://ruby-doc.org/stdlib/libdoc/timeout/rdoc/index.html这可能吗? 最佳答案 只需为超时使用十进制值。n毫秒的示例:Timeout::timeout(n/1000.0){sleep(100)} 关于Ruby在n*milli*秒后超时一段代码,我们在StackOverflow上找到一个类似的问题: https:

  5. 已解决socket.timeout : The read operation timed out - 2

    已解决(pip安装模块超时,利用四种国内镜像源完美解决)WARENTING:Retrying(Retry(total=4,connect=None,read=None,redirect=None,status=None))afterconnectionbrokenby‘ConnectTimeoutError(pip._vendor.urllib3.connection.HTTPSConnectionobjectatOx00001D6OE4F4A940>,‘Connectiontopypi.orgtimedout.(connecttimeout=15)’)’':/simple/pip/socke

  6. ruby - Cucumber 测试无法启动,错误为 "Display socket is taken but lock file is missing.." - 2

    运行cucumber后bundleexeccucumberfeatures/emails.feature:20我遇到了错误Displaysocketistakenbutlockfileismissing-checktheHeadlesstroubleshootingguide(Headless::Exception)/Users/me/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/headless-2.2.0/lib/headless.rb:195:inensure_xvfb_is_running'/Users/me/.rbenv/ver

  7. ruby-on-rails - unicorn 超时处理 - 2

    我想知道从我的应用程序跟踪unicorn超时的最佳方法是什么。该应用程序的某些部分运行缓慢,目前它们已安静地超时。我可以增加超时时间,但这将问题推到了地毯下。理想情况下,我希望收到减速板通知或类似的效果。我不是在寻找性能指南,我只是在寻找一种高效可靠地了解超时的方法。其他人如何使用unicorn处理Rails应用程序的超时?扫描nginx错误日志?在unicorn配置中插入处理程序?nginx配置中的处理程序?[Ubuntu12.04+nginx+unicorn+rails3.2+ruby1.9.3] 最佳答案 我倾向于在NewRe

  8. ruby - Interface Builder 看不到 MacRuby 的 socket - 2

    我正在尝试使用XCode和InterfaceBuilder构建一个基本的helloworld应用程序。但是,在InterfaceBuilder中,我看不到我的socket可以连接起来。我转到对象检查器Pane的连接选项卡,它显示“NewReferencingOutlet”。我想知道我的代码是否有误。在这里classHelloWorldControllerattr_accessor:hello_label,:hello_button,:hellodefawakeFromNib@hello=trueenddefchangeLabel(sender)if@hello@hello_label.

  9. ruby - 在 AWS Linux 上增加 RestClient/Net::HTTP 中的 connect(2) 超时 - 2

    我正在使用rest-client发布到一个非常慢的网络服务。我将timeout设置为600秒,并且我已经确认它正在传递给Net::HTTP的@read_timeout和@open_timeout.但是,大约两分钟后,我收到一个低级超时错误,Errno::ETIMEDOUT:Connectiontimedout-connect(2):回溯的相关部分是Operationtimedout-connect(2)for[myhost]port[myport]/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in

  10. ruby-on-rails - 如何在 sidekiq 中设置作业超时 - 2

    我遇到了sidekiq的问题:我想为作业设置超时,这意味着当作业的处理时间大于超时时,该作业将停止。我已经搜索了如何在文件sidekiq.yml中设置全局超时配置。但是我想为不同的单独作业设置单独的超时,这意味着定义工作人员的类之一将具有特定的超时配置。你能帮帮我吗?非常感谢。 最佳答案 没有批准的方法可以做到这一点。您无法在线程执行时安全地停止它。您需要更改工作以定期检查它是否应该停止。您可以为您正在进行的任何第3方调用设置网络超时,以便它们超时。 关于ruby-on-rails-如何

随机推荐