我的设置:我有 3 台几乎相同的网络服务器机器,为相同的高负载动态网站提供简单的 dns 负载平衡。该服务已经使用相同的 apache 配置运行了两年多:apache2、php5、ubuntu 8.04 linux 2.6.24-29-server。
我的问题:大约两周前我遇到了这个配置的问题。几乎每天我都会有一个小时刻,大约 5 分钟,网站无法访问。我仍然可以通过 ssh 登录到服务器。如果我运行htop
,我会看到机器什么也不做。我有大约 1000 个 apache 进程在运行,但没有 CPU 活动。
我已经使用 apache mod_status 来调试这种情况。流程记分板如下所示:
_C.___K_______________________R._______.__K_K____K___C_______.__
_______C__________.___________________________________.________C
_.____K__________K___K_WK_____._K_____________________________._
W______K__________K________.____________________._______C_______
_C_.__K__K____.._.._____________________________________C_______
_R___________K___.______C________.C_________.______._____C______
____________KKC____K_____K__WC_________________C_____.__.____.__
_____________________C_________K______.____C______._____________
_.___C____.___.___________________________.K______.____K________
W__.___________________C.__.____K________K_______R_._.__._______
__C__C_.__________C__C_______._____W______________C_.___C_______
____.______C_____________C________.____C____________.________._K
__.__________.K_____________K_________._____C____.K__________KW_
__K.W________R_________._______.___W___________.____.__K_____W__
W___.___..________W____K
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with …
Run Code Online (Sandbox Code Playgroud) 我有一个 MySQL 5.0.75 服务器在我的 Linux 笔记本上运行,我想从本地网络中的另一台机器连接到它。
此连接需要 5-6 秒:
mysql -h 172.22.65.101 -u myuser -p123
Run Code Online (Sandbox Code Playgroud)
对 MySQL 主机的 ping:
PING 172.22.65.101 (172.22.65.101) 56(84) bytes of data.
64 bytes from 172.22.65.101: icmp_seq=1 ttl=64 time=0.799 ms
64 bytes from 172.22.65.101: icmp_seq=2 ttl=64 time=0.000 ms
64 bytes from 172.22.65.101: icmp_seq=3 ttl=64 time=6.43 ms
64 bytes from 172.22.65.101: icmp_seq=4 ttl=64 time=0.000 ms
64 bytes from 172.22.65.101: icmp_seq=5 ttl=64 time=3.81 ms
64 bytes from 172.22.65.101: icmp_seq=6 ttl=64 time=0.706 ms
^C
--- 172.22.65.101 ping statistics --- …
Run Code Online (Sandbox Code Playgroud) 在尝试将所有文件从一个 Web 服务器(“源”)传输到另一个(“目标”)时,wget 命令通过 FTP 进行连接,但无法在 PASV 命令之外继续进行。
我正在使用到“目标”服务器(共享主机上的 Linux 机器)的 SSH 连接来运行 wget 命令。
“源”服务器是微软服务器,我桌面上的FTP客户端没有问题。
这是我用来启动传输的命令:
wget -m ftp://username:'password'@sourceserver.com
Run Code Online (Sandbox Code Playgroud)
登录成功,然后发出这些命令:
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> ... couldn't connect to xxx.xxx.xxx.xxx port 1128: Connection timed out
Retrying.
Run Code Online (Sandbox Code Playgroud)
由于“无法连接”错误,每次重试时,它都会尝试不同的端口号(不是 21,它已经成功连接到)。我第一次记录错误时,它尝试了 487X 范围内的端口。
我不知道问题是在 Microsoft(“源”)服务器端还是在 Linux(“客户端”)端。
想法?
我正在尝试使用 siege 和以下命令在我自己的服务器中进行压力测试:
$ siege -c 500 myweb.com/somefile.php
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
[error] descriptor table full sock.c:119: Too many open files
Run Code Online (Sandbox Code Playgroud)
我也收到了这个警告:
libgcc_s.so.1 must be installed for pthread_cancel to work
Run Code Online (Sandbox Code Playgroud)
但是我使用的是 Ubuntu 15.04(开发分支)并且我已经安装了 libgcc1 包,所以我不知道它为什么要抱怨那个 .so 共享库。
如何解决打开的文件过多和 libgcc 警告?
我的应用程序需要非常频繁地连接到另一台机器上的 mysql 数据库。但是我在连接时经常出错;我通常最终可以连接,但经过多次重试。我得到的错误信息是:
Mysql.mysql(): Couldn't connect to SQL-server: Lost connection to MySQL server at 'reading authorization packet', system error: 2
我已经阅读了这里的信息:http : //dev.mysql.com/doc/refman/5.0/en/error-lost-connection.html以及对错误http://bugs.mysql.com/bug的评论.php?id=28359。
如您所见,有相当多的中止连接:
mysql> SHOW GLOBAL STATUS LIKE 'Aborted_connects'; +-----------------+-------+ | 变量名 | 价值 | +-----------------+-------+ | Aborted_connects | 2540 | +-----------------+-------+
我将超时从 5 秒增加到 15 秒:
mysql> 显示变量,如“connect_timeout”; +-----------------+-------+ | 变量名 | 价值 | +-----------------+-------+ | 连接超时| 15 | +-----------------+-------+
但这并没有帮助。任何建议如何调试?当它在工作之前平均必须尝试连接 5 次时,它会使数据库交互变得非常缓慢。
我还没有尝试在应用程序的整个生命周期内保持连接打开,这样会更好吗?如何防止连接关闭?
如果它有助于解决问题的计算机是 Windows 7 32 位,而 mysql 服务器在 Debian …
我们的服务器遇到了严重的连接超时问题,所以我们用tcptrack跟踪tcp连接
我们发现,如果客户端开始连接到服务器,tcptrack 显示连接,但处于 SYN_SENT 状态,并且netstat -nat
什么也不显示。(tcptrack & netstat 都在服务器上运行)
我ab
在同一个内网中做了一个基准测试,到指定的网卡,它处理了 10000 个并发连接和 400000 个请求
ps:这不是每次都发生,但确实发生了很多
pps:有没有什么好的工具可以追踪tcp连接丢失的地方?
使用 Windows RDP,我试图连接到我之前连接过的远程机器。我不得不重新启动服务器...
现在,我输入我的凭据,它看起来可以正常工作(状态文本快速更改)。
“连接到远程服务器” “配置远程会话”
然后它什么都不做并返回到主连接窗口。没有错误信息。就是什么都不做。
我可以正常连接到其他机器。如果我输入错误的密码,它会拒绝我。
除了使用 iptables 来记录传入的连接..
有没有办法将已建立的入站连接记录到您没有来源的服务(假设该服务不会自行记录此类内容)?我想要做的是根据谁在连接来收集一些信息,以便能够告诉诸如一天中使用最多的服务的时间,主要用户群在世界上的哪个位置等。
我知道我可以使用netstat
并将其连接到 cron 脚本,但这可能不准确,因为脚本只能运行一分钟。
这是我现在的想法:
netstat
,寻找没有出现在上次轮询中的已建立连接。不过,这个想法似乎是在浪费 CPU 时间,因为可能没有新的连接..编辑:我突然想到这个问题可能更适合 stackoverflow,尽管我不确定。对不起,如果这是错误的地方。
我们的服务器因 TCP/IP 会话而过载,我们有 1200 - 1500 个会话。他们中的大多数都挂在 TIME_OUT 状态。事实证明,处于 TIME_OUT 状态的连接会占用一个套接字,直到 60 秒超时。
问题是服务器没有响应,许多客户端没有得到服务。
我做了一个简单的测试:使用 Internet Explorer 8.0 从服务器下载一个 XML 文件 下载在几分之一秒内完成。但是后来我看到 TCP/IP 连接在 TIME_OUT 状态下挂了 60 秒。
有没有办法摆脱 TIME_OUT 等待或减少为新连接释放套接字的时间?
我明白为什么 TCP/IP 连接会进入 TIME_OUT 状态,但我不明白为什么 Internet Explorer 在 XML 文件下载结束后没有关闭连接。
细节。
我们的服务器运行用 Perl (mod-perl) 编写的 Web 服务。该服务向客户提供天气数据。客户端是一个 Flash 应用程序(实际上是嵌入在 Windows 应用程序中的 Flash ActiveX 控件)。
操作系统: Ubuntu
Apache“Keep Alive”选项设置为 0
我正在配置我们的服务器,由于我们的负载平衡器的性质,我们无法发送连接保持活动的标头。我正在尝试确定将这些标头发送给最终用户和服务器的影响。任何一个都会注意到什么吗?
connection ×10
tcp ×3
mysql ×2
socket ×2
apache-2.2 ×1
centos ×1
ftp ×1
gcc ×1
http-headers ×1
keepalive ×1
networking ×1
performance ×1
rdp ×1
reverse-dns ×1
tcpip ×1
timeout ×1
ubuntu ×1
web-server ×1
wget ×1
windows ×1