我们在 EC2 上托管的 Tomcat 前面有一个 apache 网络服务器,实例类型特大,内存为 34GB。
我们的应用程序处理大量外部网络服务,我们有一个非常糟糕的外部网络服务,在高峰时段需要将近 300 秒来响应请求。
在高峰时段,服务器只有大约 300 个 httpd 进程而窒息。ps -ef | grep httpd | wc -l =300
我在谷歌上搜索并发现了许多建议,但似乎没有任何效果..以下是我所做的一些配置,这些配置直接取自在线资源。
我在 apache 和 tomcat 中都增加了最大连接数和最大客户端数的限制。这是配置详细信息:
//阿帕奇
<IfModule prefork.c>
StartServers 100
MinSpareServers 10
MaxSpareServers 10
ServerLimit 50000
MaxClients 50000
MaxRequestsPerChild 2000
</IfModule>
Run Code Online (Sandbox Code Playgroud)
//tomcat
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="600000"
redirectPort="8443"
enableLookups="false" maxThreads="1500"
compressableMimeType="text/html,text/xml,text/plain,text/css,application/x-javascript,text/vnd.wap.wml,text/vnd.wap.wmlscript,application/xhtml+xml,application/xml-dtd,application/xslt+xml"
compression="on"/>
Run Code Online (Sandbox Code Playgroud)
//sysctl.conf
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
fs.file-max = 5049800
vm.min_free_kbytes = 204800
vm.page-cluster = 20
vm.swappiness = 90
net.ipv4.tcp_rfc1337=1
net.ipv4.tcp_max_orphans = 65536
net.ipv4.ip_local_port_range = 5000 65000
net.core.somaxconn …Run Code Online (Sandbox Code Playgroud) 我想要一个 UNIX 域套接字,例如 /var/program/program.cmd,通过 TCP 公开,比如说在端口 12345 上。我也希望它在后台全时运行。
做到这一点的最佳方法是什么?如果相关,则系统正在运行 Ubuntu 12.04.2。
同样使用建议的解决方案,它是否会在删除和重新创建域套接字后继续存在?
编辑
以下是 init 脚本形式的已接受答案的结果:https : //github.com/Wirehive/haproxy-remote
tcpdump在与 apache 服务器的本地连接上运行时,我发现 TCP 连接每 2 秒立即建立并关闭一次。我如何找到哪个进程负责这些?netstat -ctp没有帮助,连接速度太快,并且没有为 TIME_WAIT 显示进程标识符。
结果证明它们是 haproxy 探针,我可以用 验证strace,但我仍然不知道有什么方法可以首先确定 haproxy。
我的防火墙上有许多 iptables 规则,如下所示:
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
对于每个地址,是否有两个规则的快捷方式 - 一个用于 tcp,一个用于 udp?我的意思是我可以做这样的事情:
iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT
Run Code Online (Sandbox Code Playgroud) 我注意到有时在尝试在某个随机端口进行 telnet 时,我观察到两种情况:
$ telnet example.com 3432
Trying 173.252.110.27...
$ telnet example.com 3432
Connection Refused.
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这两者有什么区别吗?
net.core.rmem_max 和 net.ipv4.tcp_rmem 的第三个值有什么区别?哪个对 tcp 连接具有更高的优先级?
对于以下两个示例,tcp 连接的最大缓冲区是多少?
Case 1:
sysctl -w net.core.rmem_max=7388608
sysctl -w net.ipv4.tcp_rmem='4096 87380 8388608'
Case 2:
sysctl -w net.core.rmem_max=8388608
sysctl -w net.ipv4.tcp_rmem='4096 87380 7388608'
Run Code Online (Sandbox Code Playgroud) 我知道 HTTP2 旨在将所有内容保持在单个 TCP 连接下,我想知道 TCP 连接多久会被断开。
例如,如果我访问 youtube,进行一些浏览,离开站点,然后返回,我会重新使用相同的 HTTPS 连接(就 TCP 4 元组而言,不是会话),还是不同的连接?
其中很多可能是特定于应用程序的,取决于浏览器如何实现它,但它是否在标准中的任何地方指定?
线鲨 | 视窗
我想搜索特定地址/消息的 SMTP 流量的数据包捕获。通常,我只是对信息列进行排序并浏览,但如果我可以对我正在寻找的特定字符串运行搜索或过滤器,那就太好了。
有没有办法在 Wireshark 中做到这一点?
3s 的初始 TCP RTO 值对于大多数基于 LAN 的应用程序来说太长了。我怎样才能调低?有sysctl吗?
好的,我刚刚解决了几个 Xserve、Netgear GSM7224 和 Drobo B800i 之间的巨型帧问题。事实证明,Xserves(Mac OS X 10.6.8 服务器)和 Drobo B800i 接受 MTU(以字节为单位)正常预期(1500-9000),但 Netgear 似乎希望它包括各种以太网页眉/页脚(拖车) 我最终得到了 Xserves & Drobo 的 MTU 配置为 9000 和 Netgear 端口设置为 9216 的 MTU。
我使用以下命令通过 Netgear 测试和验证两个 Xserve 之间的 MTU(注意:这些是 Mac OS X 命令,Windows 和 Linux 的命令不同):
ping -D -s <mtu> <ip_address>
traceroute -F <ip_address> <mtu>
Run Code Online (Sandbox Code Playgroud)
前者的用法在man页面中注明为“指定要发送的数据字节数。默认为56,当与8字节的ICMP头数据组合时,转换为64个ICMP数据字节”。在测试中,我发现ping -D 1472 <ip_address>由于 8 字节的 ICMP 标头数据加上 20 字节的 IP 标头(请参阅此和此),to相当于 MTU 1500 。这一切都说得通。
现在,为什么是 9000 …
tcp ×10
linux ×3
linux-kernel ×2
apache-2.2 ×1
connection ×1
ethernet ×1
firewall ×1
http ×1
https ×1
iptables ×1
monitoring ×1
mtu ×1
networking ×1
socket ×1
tcpip ×1
tomcat ×1
ubuntu ×1
udp ×1
wireshark ×1