标签: time-wait

服务器端的许多TIME_WAIT的成本是多少?

我们假设有一个客户端与服务器建立了很多短生命的连接.

如果客户端关闭连接,则客户端上将有许多TIME_WAIT状态的端口.由于客户端耗尽本地端口,因此无法快速进行新的连接尝试.

如果服务器关闭了连接,我会TIME_WAIT在服务器端看到很多s.但是,这有什么害处吗?客户端(或其他客户端)可以继续进行连接尝试,因为它永远不会耗尽本地端口,并且TIME_WAIT服务器端的状态数将增加.最终会发生什么?有什么不好的事吗?(减速,崩溃,掉线等)

请注意,我的问题不是"目的是TIME_WAIT什么?" 但是"如果TIME_WAIT服务器上有这么多状态,会发生什么?" 我已经知道在TCP/IP中关闭连接时会发生什么以及为什么TIME_WAIT需要状态.我不是想解决它,但只是想知道它的潜在问题.

简单来说,让我们说netstat -nat | grep :8080 | grep TIME_WAIT | wc -l打印100000.会发生什么?O/S网络堆栈是否会变慢?"打开文件太多"错误?或者,没什么好担心的?

tcp time-wait

61
推荐指数
3
解决办法
7万
查看次数

webdriver.get()和webdriver.navigate()之间的区别

get()navigate()方法有什么区别?是否有任何此方法或其他方法等待加载页面内容?我真正需要的是像selenium WaitForPageToLoadWaitForPageToLoad webdriverwebdriver` 这样的东西.

有什么建议?

java webdriver time-wait selenium-webdriver

59
推荐指数
3
解决办法
16万
查看次数

如果在我持续执行timed_wait时系统时间发生了变化怎么办?

当使用timed_waitboost::condition_variable具有持续时间,将等待状态超时即使用户(或NTP)更改系统时间的持续时间后?

例如,

boost::posix_time::time_duration wait_duration(0, 0, 1, 0);  // 1 sec
// ** System time jumps back 15 minutes here. **
if( !signal.timed_wait(lock, wait_duration) )
{
    // Does this condition happen 1 second later, or about 15 minutes later?
}
Run Code Online (Sandbox Code Playgroud)

c++ boost timeout condition-variable time-wait

8
推荐指数
1
解决办法
2389
查看次数

go client程序在TIME_WAIT状态下生成很多套接字

我有一个go程序,可以从多个协同程序生成大量的HTTP请求.运行一段时间后,程序会发出错误:connect:无法分配请求的地址.

使用netstat进行检查时,我在TIME_WAIT中获得了一个高数字(28229)的连接.

当协程的数量为3时,会发生大量的TIME_WAIT套接字,并且当它为5时严重到足以导致崩溃.

我在docker下运行Ubuntu 14.4并转到版本1.7

这是go计划.

package main

import (
        "io/ioutil"
        "log"
        "net/http"
        "sync"
)
var wg sync.WaitGroup
var url="http://172.17.0.9:3000/";
const num_coroutines=5;
const num_request_per_coroutine=100000
func get_page(){
        response, err := http.Get(url)
        if err != nil {
                log.Fatal(err)
        } else {
                defer response.Body.Close()
                _, err =ioutil.ReadAll(response.Body)
                if err != nil {
                        log.Fatal(err)
                }
        }

}
func get_pages(){
        defer wg.Done()
        for i := 0; i < num_request_per_coroutine; i++{
                get_page();
        }
}

func main() {
        for i:=0;i<num_coroutines;i++{
                wg.Add(1)
                go get_pages()
        }
        wg.Wait()
}
Run Code Online (Sandbox Code Playgroud)

这是服务器程序: …

client http go time-wait

8
推荐指数
1
解决办法
4736
查看次数

python中的MySQL连接池?

我正在尝试使用Python处理大量数据并在MySQL中维护处理状态.但是,我很惊讶没有python-mysql的标准连接池(如Java中的HikariCP).

我最初是从PyMySQL开始的,事情很棒,直到程序运行最初几个小时.几个小时后,事情开始失败.我遇到了很多错误:

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 99] Cannot assign requested address)")
Run Code Online (Sandbox Code Playgroud)

此外,很多端口都处于TIME_WAIT状态,因为由于缺少连接池,我太频繁地打开和关闭连接

/d/p/950 ??? netstat -nt | wc -l
84752
Run Code Online (Sandbox Code Playgroud)

这个,我试图设置tcp_fin_timeout和ip_local_port_range,但几乎没有任何改善.

echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 15000 65000 > /proc/sys/net/ipv4/ip_local_port_range
Run Code Online (Sandbox Code Playgroud)

然后我发现MySQL提供了带有功能的mysql.connector .在做完所有这些表现后实际上恶化了.更多流程开始失败.我正在使用Python的多处理模块在24核机器上同时运行29个进程(多处理.Pool默认选择此项).以下是代码,当然我使用.my.cnf传递所有凭据以避免将它们提交给git:

    import mysql.connector
    from mysql.connector import pooling
    conn_pool = pooling.MySQLConnectionPool(pool_name="mypool1",
                                              pool_size=pooling.CNX_POOL_MAXSIZE,
                                              option_files=MYSQL_CONFIG,
                                              option_groups=MYSQL_GROUP_NODE1,
                                              allow_local_infile=True)
conn = conn_pool.get_connection()
Run Code Online (Sandbox Code Playgroud)

最后,还原为旧代码.仍在使用PyMySQL,虽然错误较少,但它仍然是一个重大问题.我查看了SQLAlchemy,并没有真正找到关于池的文档.

我想知道其他人如何处理mysql-python连接池问题?我真的相信应该有一些东西,所以我不必重新发明轮子.

任何指针都非常感谢.

connection-pooling time-wait pymysql mysql-connector-python python-multiprocessing

8
推荐指数
1
解决办法
4114
查看次数

python SimpleHTTPRequestHandler服务器退出后使套接字处于TIME_WAIT状态

我编写了一个简单的服务器来扩展SimpleHTTPRequestHandler

如果我在没有向服务器发出任何请求的情况下启动和停止它,我可以开始备份同一个端口,没有任何问题.

启动时,netstat看起来像这样:

sam@hersheezy:server$ sudo netstat -na --program | grep 8001
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      23392/python

发出请求后,netstat看起来像这样(即使请求完成后):

sam@hersheezy:server$ sudo netstat -na --program | grep 8001
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      23392/python    
tcp        0      0 127.0.0.1:8001          127.0.0.1:48659         TIME_WAIT   -

然后,我使用Cc杀死服务器,netstat看起来像这样(此时我无法重启服务器,因为端口已经在使用):

 sudo netstat -na --program | grep 8001
tcp        0      0 127.0.0.1:8001          127.0.0.1:48674         TIME_WAIT   - 

我显然没有正确地关闭一些东西.我发送回复的代码如下所示:

"""
reply is an object that can be json encoded that is written with a response code 200
"""
def send_provider_reply(self, replyobj): …
Run Code Online (Sandbox Code Playgroud)

python http time-wait python-2.7

5
推荐指数
1
解决办法
2007
查看次数

ruby http 连接池

我必须在 Rails 应用程序中创建 http 连接才能从远程服务器提取一些数据。我正在使用 Net:HTTP,但创建的 http 连接不是持久的。所以我最终有很多处于 TIME_WAIT 状态的套接字,因为这些 http 连接已关闭。有人知道一个好的池化宝石可以保持连接持久并重用它们吗?

ruby connection-pooling http time-wait

5
推荐指数
1
解决办法
3647
查看次数

winsock资源不足

我们有ac #web服务和客户端,都是在Visual Studio 2008中创建的(新项目 - > ASP.Net Web服务应用程序).服务托管在Windows Server 2012 R2,IIS 8.5上.

当客户端将数据发送到我们的服务时,我们将其转发给第三方服务,将结果保存到数据库并将其返回给客户端.

问题是,在极少数情况下,当我们的服务负载很重(每秒许多请求)时,它会开始抛出'不足的winsock资源来完成套接字连接启动'.

我们发现我们的Web服务正在打开许多与第三方服务的TCP连接,并使它们处于TIME_WAIT状态.当此类连接的数量达到较高数量(大约17000)时,整个服务器将无法建立任何新连接.从远程桌面到互联网浏览器的一切都停止工作.这持续几分钟,然后,当Windows开始关闭这些连接时,它会恢复正常.

为了与第三方服务进行通信,我们的服务在其整个生命周期中仅使用一个SoapClient实例.它是在初始化时创建的,永远不会被关闭或销毁; 永远不会创建新实例.

BLIND.BLINDSoapClient client = new BLIND.BLINDSoapClient(base.binding, base.address);
Run Code Online (Sandbox Code Playgroud)

将数据发送到第三方服务时,我们只需调用其Web方法,并在不关闭,处置或进行任何清理的情况下将其保留:

BLIND.Answer answer = client.Search(...);
..save to database
return answer;
Run Code Online (Sandbox Code Playgroud)

我们可以做些什么来避免这种time_wait连接的积累?

有没有更好的方法来管理SoapClient?我们应该为每个请求打开一个新的soap客户端并手动关闭它们吗?

如果它是相关的,这是我们的绑定设置方式:

      binding = new BasicHttpBinding();
      binding.Name = "SLTDSoap";
      binding.CloseTimeout = TimeSpan.FromSeconds(Timeout);
      binding.OpenTimeout = TimeSpan.FromSeconds(Timeout);
      binding.ReceiveTimeout = TimeSpan.FromSeconds(Timeout);
      binding.SendTimeout = TimeSpan.FromSeconds(Timeout);
      binding.AllowCookies = false;
      binding.BypassProxyOnLocal = false;
      binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
      binding.MaxBufferSize = 65536;
      binding.MaxBufferPoolSize = 524288;
      binding.MessageEncoding = WSMessageEncoding.Text;
      binding.TextEncoding = System.Text.Encoding.UTF8;
      binding.TransferMode = TransferMode.Buffered;
      binding.UseDefaultWebProxy …
Run Code Online (Sandbox Code Playgroud)

c# asp.net web-services time-wait

5
推荐指数
1
解决办法
1万
查看次数

我如何使用UpdateProgress控件显示等待时间

我有一个ASP.NET应用程序ListView.我从Active Directory获取数据,现在我想要一个等待符号,如果它ListVew正在构建.我以为我使用了UpdateProgressAjax Control工具包中的Control.但是我不知道如果我点击按钮并且等待符号(例如gif)关闭,如果ListView完成,我将如何使用它.:(

我的CS档案:

protected void btnBenutzerSuchen_Click(object sender, EventArgs e)
{
     //If I click on this Button the gif must start

    try
    {
        ... // my ListView get data

        this.myListView.DataSource = dv; 
        this.myListView.DataBind();

        ...

    }
    catch (Exception)
    {
        ...
    }

   //If the ListView is finish the gif must close 
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做 我可以这样做UpdateProgress:

<asp:UpdateProgress ID="UpdateProgress1" DynamicLayout="true" runat="server" AssociatedUpdatePanelID="?" >
    <ProgressTemplate>
    <div class="progress">
        <img src="images/ajax-loader-arrows.gif" />&nbsp;please wait...
    </div>
    </ProgressTemplate>
</asp:UpdateProgress> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net listview time-wait updateprogress

4
推荐指数
1
解决办法
5万
查看次数

具有多个代理的 HttpClient,同时处理套接字耗尽和 DNS 回收

我们正在与朋友一起开发一个有趣的项目,我们必须执行数百个 HTTP 请求,所有请求都使用不同的代理。想象一下,它类似于以下内容:

for (int i = 0; i < 20; i++)
{
    HttpClientHandler handler = new HttpClientHandler { Proxy = new WebProxy(randomProxy, true) };

    using (var client = new HttpClient(handler))
    {
        using (var request = new HttpRequestMessage(HttpMethod.Get, "http://x.com"))
        {
            var response = await client.SendAsync(request);

            if (response.IsSuccessStatusCode)
            {
                string content = await response.Content.ReadAsStringAsync();
            }
        }

        using (var request2 = new HttpRequestMessage(HttpMethod.Get, "http://x.com/news"))
        {
            var response = await client.SendAsync(request2);

            if (response.IsSuccessStatusCode)
            {
                string content = await response.Content.ReadAsStringAsync();
            }
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# httpclient time-wait .net-core

4
推荐指数
1
解决办法
2927
查看次数