相关疑难解决方法(0)

现代Linux机箱可以拥有的理论最大开放TCP连接数是多少

假设硬件具有无限的性能,Linux机箱是否支持> 65536个开放的TCP连接?

据我所知,短暂端口的数量(<65536)限制了从一个本地IP到一个远程IP上的一个端口的连接数.

元组(本地ip,本地端口,远程ip,远程端口)是唯一定义TCP连接的东西; 这是否意味着如果这些参数中有多个是免费的,则可以支持超过65K的连接.例如,从多个本地IP连接到多个远程主机上的单个端口号.

系统中还有另外16位的限制吗?或许文件描述符的数量?

port tcp file-descriptor linux-kernel

226
推荐指数
3
解决办法
17万
查看次数

linux上的机器之间的tcp/ip连接数量是否有限制?

我有一个非常简单的程序,在5分钟内编写,打开一个服务器套接字并循环遍历请求,并将发送给它的字节打印到屏幕.

然后我尝试对可以使用多少个连接进行基准测试,以试图找出我可以用这个程序支持多少并发用户.

在另一台机器上(它们之间的网络没有饱和)我创建了一个简单的程序,它进入循环并连接到服务器机器并发送字节"hello world".

当循环为1000-3000时,客户端完成所有发送的请求.当循环超过5000时,在完成第一个X个请求后开始超时.为什么是这样?我确保在循环中关闭我的套接字.

你能在一段时间内创建这么多连接吗?

这个限制是否仅适用于同一台机器,我不必担心生产中5000多个请求都来自不同的机器?

sockets linux tcp

25
推荐指数
2
解决办法
9万
查看次数

Docker在高负载时阻塞传出连接?

我们有一个node.js Web服务器,它向外部API发出一些传出的http请求.它使用dokkudocker中运行.
经过一段时间的加载(30req/s)后,这些传出请求不再得到响应.

这是我用常量req/s测试时的图表: 图形 incoming并且outgoing是并发请求的数量(不是初始化请求的数量).(在图表中很难看到,但每次约10次请求时它相当稳定.)
response time仅适用于外部请求.你可以清楚地看到他们突然失败(达到1000毫秒超时).


我们发送的req/s越多,我们遇到这个问题的速度就越快,所以我们必须有一些限制,我们越来越接近每个请求.


netstat -ant | tail -n +3 | wc -l在主机上用来获取开放连接的数量,但它只有~450(大多数TIME_WAIT).这不应该达到套接字限制.我们也没有达到任何RAM或CPU限制.


我也尝试在docker之外的同一台机器上运行相同的应用程序,它只发生在docker中.

sockets tcp http docker dokku

19
推荐指数
1
解决办法
1673
查看次数

如何弄清楚为什么npm挂起?

我正遭受臭名昭着npm install(更新)悬挂问题的困扰.

到目前为止,我发现了以下食谱:

但它仍然悬而未决.它挂起的位置似乎是随机的.它可以 npm verb get saving gulp-traceur to /home/me/.npm/registry.npmjs.org/gulp-traceur/.cache.json; 或者在安装npm verb afterAdd /home/me/.npm/q/0.9.7/package/package.json下载的最后一个包时非常随机.

版本是:

npm info使用npm@2.7.5 npm info使用node@v0.12.0

所以问题是我能做些什么吗?

npm

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

与浏览器相比,通过Node.js延迟HTTP请求

使用Node.js通过HTTP请求查询某些公共API.因此,我正在使用该request模块.我正在测量我的应用程序中的响应时间,并看到我的应用程序从API查询返回的结果比通过curl或浏览器中的"直接"请求慢2-3倍.此外,我注意到与启用HTTPS的服务的连接通常比纯HTTP服务更长,但这可能是巧合.

我试图优化我的request选择,但无济于事.例如,我查询

https://www.linkedin.com/countserv/count/share?url=http%3A%2F%2Fwww.google.com%2F&lang=en_US

我正在使用request.defaults设置所有请求的总体默认值:

var baseRequest = request.defaults({
    pool: {maxSockets: Infinity},
    jar: true,
    json: true,
    timeout: 5000,
    gzip: true,
    headers: {
        'Content-Type': 'application/json'
    }
});
Run Code Online (Sandbox Code Playgroud)

实际请求是通过

...
var start = new Date().getTime();

var options = {
    url: 'https://www.linkedin.com/countserv/count/share?url=http%3A%2F%2Fwww.google.com%2F&lang=en_US',
    method: 'GET'
};

baseRequest(options, function(error, response, body) {

    if (error) {
        console.log(error);
    } else {
        console.log((new Date().getTime()-start) + ": " + response.statusCode);
    }

});
Run Code Online (Sandbox Code Playgroud)

有人看到优化潜力吗?我做错了什么吗?提前感谢任何建议!

javascript http request node.js

12
推荐指数
2
解决办法
4304
查看次数

多线程Python应用程序和套接字连接的问题

我正在研究在带有4G内存的Ubuntu机器上运行的Python应用程序的问题.该工具将用于审核服务器(我们更喜欢使用自己的工具).它使用线程连接到许多服务器,并且许多TCP连接失败.但是,如果我在开始每个线程之间添加1秒的延迟,那么大多数连接都会成功.我用这个简单的脚本来调查可能发生的事情:

#!/usr/bin/python

import sys
import socket
import threading
import time

class Scanner(threading.Thread):
    def __init__(self, host, port):
        threading.Thread.__init__(self)
        self.host = host
        self.port = port
        self.status = ""

    def run(self):
        self.sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sk.settimeout(20)
        try:
            self.sk.connect((self.host, self.port))
        except Exception, err:
            self.status = str(err)
        else:
            self.status = "connected"
        finally:
            self.sk.close()


def get_hostnames_list(filename):
    return open(filename).read().splitlines()

if (__name__ == "__main__"):
    hostnames_file = sys.argv[1]
    hosts_list = get_hostnames_list(hostnames_file)
    threads = []
    for host in hosts_list:
        #time.sleep(1)
        thread = Scanner(host, 443)
        threads.append(thread)
        thread.start()

    for thread in threads: …
Run Code Online (Sandbox Code Playgroud)

python sockets multithreading

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

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

我正在使用rest-client来POST一个非常慢的Web服务.我设置timeout为600秒,我已经确认它正在传递给Net :: HTTP @read_timeout@open_timeout.

但是,大约两分钟后,我得到一个低级超时错误,Errno::ETIMEDOUT: Connection timed out - connect(2):

回溯的相关部分是

Operation timed out - connect(2) for [myhost] port [myport]
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `initialize'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `open'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:879:in `block in connect'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:88:in `block in timeout'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:98:in `call'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/timeout.rb:98:in `timeout'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:878:in `connect'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:863:in `do_start'
/Users/dmoles/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/net/http.rb:852:in `start'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:766:in `transmit'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:215:in `execute'
/Users/dmoles/.rvm/gems/ruby-2.2.5/gems/rest-client-2.0.0/lib/restclient/request.rb:52:in `execute'
Run Code Online (Sandbox Code Playgroud)

看起来抛出错误的代码行是

TCPSocket.open(conn_address, conn_port, @local_host, @local_port)
Run Code Online (Sandbox Code Playgroud)

好像底层connect(2)系统调用的超时时间大约是两分钟,而传递给Net :: HTTP的超时参数只能缩短它,而不能延长它.有没有办法修改套接字参数来设置更长的超时?

编辑添加:这似乎只是我们的AWS Linux服务器上的问题 - 在我的MacOS开发机器上,十分钟超时工作.我假设connect()MacOS/BSD上的默认超时时间更长,但我真的不知道.

ruby sockets amazon-ec2 net-http

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

Socket.io 扩展问题

我有 3 个 Nodejs 应用程序在带有 Nginx 反向代理的 GCP 计算引擎实例(2cpu、2GB 内存、ubuntu 20.04)上运行。其中之一是 socket.io 聊天服务器。socket.io 应用程序@socket.io/cluster-adapter使用所有可用的 CPU 核心。\n我按照教程更新了 Linux 设置以获得最大连接数。这是命令的输出ulimit

\n
core file size          (blocks, -c) 0\ndata seg size           (kbytes, -d) unlimited\nscheduling priority             (-e) 0\nfile size               (blocks, -f) unlimited\npending signals                 (-i) 7856\nmax locked memory       (kbytes, -l) 65536\nmax memory size         (kbytes, -m) unlimited\nopen files                      (-n) 500000\npipe size            (512 bytes, -p) 8\nPOSIX message queues     (bytes, -q) 819200\nreal-time priority              (-r) 0\nstack size              (kbytes, -s) 8192\ncpu time               (seconds, -t) unlimited\nmax …
Run Code Online (Sandbox Code Playgroud)

scaling nginx websocket socket.io

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

REST Web服务和Keep-Alive

我正在建立一个面向服务的Web应用程序.UI部分(Web应用程序)正在使用我正在编码的REST Web服务.所以我在服务器端和客户端都有.

我只是想知道在这种情况下设置HTTP keep-alive是否有意义.如果是的话,我很好奇为什么.

提前致谢.

rest web-services keep-alive

7
推荐指数
1
解决办法
9934
查看次数

我可以一次打开多少个TCP套接字?

我将开发一个TCP服务器应用程序.我在"选择服务器"步骤.我的TCP服务器将拥有2000多个客户端和一个套接字到每个客户端.

根据操作系统的不同,创建的套接字数量是否有限制?哪个操作系统允许在给定时间更多的开放套接字?

unix sockets windows operating-system tcp

6
推荐指数
2
解决办法
2万
查看次数

JVM 应用程序可以建立的最大传出 HTTP 连接数是多少?

我有一个 Scala 应用程序,它使用 Finagle HTTP 客户端每秒向代理后面的 10 个外部 HTTP API 发出多达 2k 个请求。

我已将每个外部主机的连接池大小配置为 2000*10(10 秒是请求超时),但我不确定这是否是有效的配置。

我没有深入的 TCP/IP 知识,但我想知道 JVM 应用程序可以与一台远程主机建立多少个 HTTP 连接以及它可以建立多少个总体传出连接是否有最大限制?限制背后的因素是什么?我有一个模糊的记忆,它可能与可用的 TCP 端口有关,但不太确定。

jvm tcp connection-pooling http finagle

2
推荐指数
1
解决办法
2178
查看次数