在正常运行一段时间后,我们的一台 Windows XP SP3 机器不再打开一些(!)新的 TCP/IP 连接。
Putty 说Network Error: no buffer space available,IE 不会打开任何新连接,但例如网络驱动器映射仍然有效,甚至可以建立新的连接。
netstat 没有显示更多打开的连接,通常,ping 和 DNS 查找工作正常。
任何提示?
许多应用程序允许我使用用户名、密码主机和端口连接到 Mysql。有些允许我配置一个套接字而不是host:port.
一个比另一个有什么明显的好处吗?我可以想象一个套接字仅在 MySQL 位于同一台机器上时才有效。是这样吗?如果是这样,使用该套接字而不是连接到 有localhost:3306什么好处吗?
我对网络和套接字的来龙去脉不太熟悉,所以也许我完全错过了一些关键信息,我的问题只是很愚蠢;如果是这样,你能解释一下我缺少什么吗?
我有一个应用程序的文件描述符用完了,显然是通过打开套接字,但我无法确切地找出这些套接字的作用。这些出现在 lsof 输出中
java 9689 appuser 1010u sock 0,5 263746675 can't identify protocol
java 9689 appuser 1011u sock 0,5 263746676 can't identify protocol
java 9689 appuser 1012u sock 0,5 263746677 can't identify protocol
java 9689 appuser 1014u sock 0,5 263746678 can't identify protocol
java 9689 appuser 1015u sock 0,5 263746679 can't identify protocol
java 9689 appuser 1016u sock 0,5 263746681 can't identify protocol
Run Code Online (Sandbox Code Playgroud)
并在 /proc/$PID/fd 中
lrwx------ 1 appuser appuser 64 Jun 23 11:49 990 -> socket:[263732085]
lrwx------ 1 appuser …Run Code Online (Sandbox Code Playgroud) 我们有一个在 linux 中运行在特定端口上的 java 服务器,它接受成千上万用户的持久连接。最近,我们的客户因超时错误而无法连接。我们怀疑流量太高,但我们的 java 日志实际上显示每秒连接的数量并不多。
我们怀疑是否有太多人同时尝试,并且它们基本上在操作系统级别被丢弃,因此java程序从来没有真正有机会接受连接?linux中是否有某种日志可以显示有人试图打一个套接字?
我尝试php5-fpm通过卷与我的nginx网络服务器共享我的套接字。Fpm 和 nginx 在不同的容器中运行,我想让它们通过共享卷工作,我将 fpm 中的套接字文件放在那里。
2014/04/13 10:53:35 [crit] 33#0: *1 connect() to unix:/container/fpm/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.8.2, server: docker.dev, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/container/fpm/run/php5-fpm.sock:", host: "docker.dev"
Run Code Online (Sandbox Code Playgroud)
我已经尝试将权限设置为 777 并将组更改php5-fpm.socket为www-data.
fpm 容器的 Dockerfile
FROM ubuntu:13.10
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y php5-cli php5-common
RUN apt-get install -y php5-fpm php5-cgi
ADD ./php-fpm.conf /etc/php5/fpm/php-fpm.conf
ADD ./pool.d/www.conf /etc/php5/fpm/pool.d/www.conf
ADD ./php.ini /etc/php5/fpm/php.ini
CMD ["/usr/sbin/php5-fpm"] …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置 Apache 2.4 以使用 mod_proxy_wstunnel 将 socket.io 的 websocket 连接代理到 node.js websocket 服务器。我们在 socket.io 0.9 上运行良好,但是在 1.0 版本中,他们将套接字端点更改为查询参数,现在我无法使用正确的代理指令配置 apache。
所有到/socket.io/?EIO=N&transport=websocket(其中 N 是任意数字,通常为 2)的ws://localhost:8082/socket.io/请求都需要转发到,但所有其他请求都需要转发到http://localhost:8082/socket.io/。
我已经尝试了以下两种配置的变体:
ProxyPass /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPassReverse /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Run Code Online (Sandbox Code Playgroud)
.
RewriteRule /socket.io/?EIO=([0-9]+)&transport=websocket ws://localhost:8082/socket.io/ [QSA,P]
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Run Code Online (Sandbox Code Playgroud)
我从谷歌搜索中了解到 ProxyPass 和 Locations 无法定位查询字符串,那么这里还有其他选择吗?路径被硬编码到 socket.io 中,所以如果没有分叉整个库,我无法更改它们。
我正在尝试配置 Nginx 服务器以通过 UNIX 域套接字连接到 Node.js HTTP 服务器。
Nginx 配置文件:
server {
listen 80;
location / {
proxy_pass http://unix:/tmp/app.socket:/;
}
}
Run Code Online (Sandbox Code Playgroud)
(根据http://wiki.nginx.org/HttpProxyModule#proxy_pass)
Node.js 脚本:
var http = require('http');
http.createServer(function(req, res) {
console.log('received request');
req.end('received request\n');
}).listen('/tmp/app.socket');
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试打电话时
curl http://localhost/
Run Code Online (Sandbox Code Playgroud)
我只在 curl 中得到 502 Bad Gateway 错误页面,而在 Node.js 进程中什么也没有。
难道我做错了什么?
编辑:
在尝试了 Quanta 的解决方案后,错误必须与 Nginx 配置有关,因为 Node.js 进程正确建立了与套接字的连接。
我也尝试以这种方式配置 Nginx:
upstream myapp {
server unix:/tmp/app.socket;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
Run Code Online (Sandbox Code Playgroud)
但这也不起作用。
顺便说一句,我正在使用 …
我想要一个 UNIX 域套接字,例如 /var/program/program.cmd,通过 TCP 公开,比如说在端口 12345 上。我也希望它在后台全时运行。
做到这一点的最佳方法是什么?如果相关,则系统正在运行 Ubuntu 12.04.2。
同样使用建议的解决方案,它是否会在删除和重新创建域套接字后继续存在?
编辑
以下是 init 脚本形式的已接受答案的结果:https : //github.com/Wirehive/haproxy-remote
服务器似乎被限制在 ~32720 个套接字......我已经尝试了所有已知的变量更改来提高这个限制。但是服务器仍然限制在 32720 个打开的套接字,即使还有 4Go 的空闲内存和 80% 的空闲 cpu...
这是配置
~# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63931
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 798621
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 2048
cpu time (seconds, -t) …Run Code Online (Sandbox Code Playgroud) 我在使用 nginx/fpm 设置站点时遇到了麻烦。该页面显示“找不到文件”,这出现在 nginx error.log 中:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
Run Code Online (Sandbox Code Playgroud)
我是 nginx 和 fpm 的新手,该错误消息对我来说毫无意义(即使谷歌机器也没有帮助!)。任何人都可以对可能发生的事情有所了解吗?
socket ×10
networking ×5
linux ×4
nginx ×3
node.js ×2
tcp ×2
apache-2.4 ×1
docker ×1
java ×1
javascript ×1
logging ×1
mysql ×1
php-fpm ×1
proxypass ×1
ubuntu ×1
udp ×1
windows-xp ×1