是否可以使用某种 shell 命令/程序来关闭套接字?我已经看到很多使用 C 和其他语言操作套接字的例子,但一直找不到专门用于它的程序。
这主要是出于好奇,而不是任何真正的需要。尽管它可能对我的应用程序进行压力测试或关闭我不想打开的 tcp 套接字很有用。
我主要对 Linux/Unix 感兴趣,但在 Windows 上执行此操作的方法也不错。
我有一项服务,服务器将 20kb xml 文件上传到我的服务器。
没有会话,它是单个 POST 请求,仅此而已。每个单独的请求都根据 xml 文件的内容进行身份验证。
由于在负载测试期间服务器耗尽了其套接字池 (32K),因此我必须进行与套接字相关的调整。
无论如何,我想知道当我将负载平衡器带入将在 2 个以上 Web 服务器之间循环请求的等式时,可能会发生什么变化。
负载平衡器可以重用套接字吗?
再次声明,客户端服务器正在将文件发布到我的服务器,一旦文件被 http 发布,它们就 100% 完成。任何后续的 http 帖子都将被视为新的“交易”。
我目前在尝试使用socket.io需要来自服务器的 websockets 支持(反向代理)时遇到很多困难。
我想知道,是否还有其他支持 websockets 的 Web 服务器?
我在使用 nginx 时遇到的错误:
2012/05/22 02:19:34 [error] 28159#0: *5 connect() failed (111: Connection refused) while connecting to upstream,
client: my.ip.ad.dr,
server: localhost,
request: "GET /socket.io/1/?t=1337653158192 HTTP/1.1",
upstream: "http://127.0.0.1:3000/socket.io/1/?t=1337653158192",
host: "lifestore.brainpad.org", referrer: "http://mywebad.dr/"
Run Code Online (Sandbox Code Playgroud) 我想以www用户身份运行 uwsgi 服务器,但如果我写:
uwsgi --socket $SOCKET --chmod-socket 666 --pidfile $PIDFILE --daemonize $LOGFILE --chdir $CHDIR --pp $PYTHONPATH --module main --post-buffering 8192 --workers 1 --threads 10 --uid www --gid www
Run Code Online (Sandbox Code Playgroud)
发生套接字创建错误:
日志:
1 *** Starting uWSGI 1.4.1 (64bit) on [Mon Dec 10 22:15:23 2012] ***
2 compiled with version: 4.4.5 on 17 November 2012 23:31:14
3 os: Linux-2.6.32-5-amd64 #1 SMP Sun Sep 23 10:07:46 UTC 2012
4 nodename: autoblog
5 machine: x86_64
6 clock source: unix
7 pcre jit disabled …Run Code Online (Sandbox Code Playgroud) 在不停机的情况下部署 HTTP 应用程序并不难:HTTP 是无状态的,因此在 2 个 HTTP 应用程序前面使用负载平衡器可以解决这个问题。如果两个应用程序都使用一个公共后端来处理会话,那么一切都会很好。
但是,WebSocket 是一种有状态协议。这意味着如果您关闭应用程序,链接将被切断。
WebSocket 是否无缝处理重新连接,在这种情况下,负载均衡器是否像处理 HTTP 应用程序一样处理这种情况?部署 WebSocket 应用程序时怎么可能不停机?
我创建了一个目录,用于存储PHP 5 FPM套接字文件:sudo mkdir /var/run/php-fpm。它由root:root核心 PHP FPM 流程拥有。
当 PHP FPM 启动时,它会为此目录中的每个池创建套接字文件,nginx 使用它们进行通信。
但是,当我重新启动我的机器 ( sudo reboot) 时,该目录在重新启动后消失了,并且 PHP FPM 无法启动,因为它无法在丢失的目录中创建套接字文件。
可能是什么问题?我该如何调试?
我正在使用最新的 Ubuntu Server 14.04。
我有一个systemd.socket名为gunicorn.socket,我想在远程服务器上更新一些代码后重新启动。
我已按照允许非 root 用户重新启动服务中详述的步骤操作并systemctl不断询问我的用户密码。这是我尝试systemctl restart gunicorn.socket与 user一起运行时所做的john:
# added an appadmin group to allow the restart command to john
addgroup appadmin
usermod -a -G appadmin john
visudo
Run Code Online (Sandbox Code Playgroud)
在sudoers:
Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start gunicorn.socket, /bin/systemctl stop gunicorn.socket, /bin/systemctl restart gunicorn.socket
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS
Run Code Online (Sandbox Code Playgroud)
然后sudo systemctl restart gunicorn.socket在服务器上工作正常,但是当我远程尝试时,我得到:
ssh example.com "sudo systemctl restart gunicorn.socket"
Failed to restart gunicorn.socket: Interactive authentication required.
See …Run Code Online (Sandbox Code Playgroud) 这个问题类似于网络端口打开,但没有附加过程?netstat显示没有 pid 的侦听端口,但 lsof 没有
我尝试了我能做的一切(作为 root:netstat、lsof、ls -al /proc/*/fd 等),但我找不到 pid。
不管怎样,我必须关闭或释放没有 pid 的端口,因为我的进程想要监听它。无论如何都要这样做吗?
我不想重新启动服务器。因为我的系统中有一个进程,它会更新我所有服务器中的bin文件,然后自动部署所有服务器。当监听7123或其他端口时,部署会失败。
谢谢。
这种情况有三台服务器,它们都是 Rackspace 的服务器,所有“坏端口”都是 udp 端口 7123。
重新启动可以解决这个问题,我已经在这三台服务器之一上尝试过。但我不想重新启动服务器。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 213120 0 134.213.205.214:7123 0.0.0.0:* -
Run Code Online (Sandbox Code Playgroud)
nmap的结果显示该端口没有关闭。(@Enzo)
root@auto:~# nmap 134.213.205.214 -p 7123 -sU
Starting Nmap 6.40 ( http://nmap.org ) at 2018-04-16 12:01 UTC
Nmap scan report for auto (134.213.205.214)
Host is up.
PORT STATE SERVICE
7123/udp open|filtered unknown
Nmap done: 1 IP address …Run Code Online (Sandbox Code Playgroud) 多 CPU 服务器正在运行多个进程。一个进程有一个线程应该始终处于旋转状态,使用它分配的 CPU 的 100%。我当前的方法(除了询问开发人员...)正在strace等待信息到达其打开的文件描述符的进程上使用recvfrom(2),erno并使用where设置为连续检查它,EAGAIN并且方法在没有数据包时返回 -1从网络套接字。
我不习惯堆栈跟踪生产设置,这是一种确定这些信息的笨拙方法。我正在proc(5)探索并认为标志字段的值/proc/[pid]/fdinfo可能有助于检查该进程是否正在使用open(2)以该O_NONBLOCK模式调用的套接字。
我目前正在努力对这个值进行逆向工程。我知道它代表文件状态和文件模式的按位或。所以我想我可以检查源头文件中常量open(2)在那个特定内核上使用的值,然后按位或它们,直到我找到一个与fdinfo. 这看起来很笨拙,如果有人可以验证上述方法(我还不能)或提供更优雅的解决方案,我将非常感激。
我也知道fnctl(2)可以将文件描述符设置为非阻塞状态,但我暂时将其视为打开
完成设置 dnsmasq 时出现此错误。
ashokkrishna@krishna:~$ sudo dnsmasq
dnsmasq: failed to create listening socket for port 53: Address already in use
ashokkrishna@krishna:~$ netstat -lpn | grep :53
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN -
tcp6 0 0 :::53 :::* LISTEN -
tcp6 0 0 :::53755 :::* LISTEN -
udp 0 0 0.0.0.0:53 0.0.0.0:* -
udp 0 0 0.0.0.0:5353 0.0.0.0:* …Run Code Online (Sandbox Code Playgroud) socket ×10
linux ×2
nginx ×2
ubuntu ×2
blocking ×1
deployment ×1
dnsmasq ×1
gunicorn ×1
internal-dns ×1
kernel ×1
networking ×1
permissions ×1
php ×1
php-fpm ×1
sudo ×1
systemctl ×1
systemd ×1
uwsgi ×1
web-server ×1