赞
踩
有一台服务器,运行sqlserver数据库,有两个网站模块的数据库在上面,负载压力不大,平时没出现过问题。后来另外一个L部门放了一个网站上去,数据库也在同一台机器上,突然有天L部门反应网站访问不了了,FTP也连不上了。但数据库能够远程连接上。
远程到服务器上,FTP服务重启,无效;网站重启,无效,查看系统日志,发现有如下错误:
xxx在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: TCP Provider, error: 0 - 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。)。
没碰到过这种情况,为了恢复服务,索性把服务器重启了,一切都好了。过了两天,又有这种情况出现。google一下,知道大概原因是端口用完了,猜测是不是L部门网站代码有问题,数据库连接泄露没关闭完?没有使用连接池?看了代码,都没问题。只好查看系统端口的使用情况:
1 命令行下输入 netstat -ano >>D://net.txt ,列出目前端口使用情况,如下大概有三千多条 ,注意红色端口的使用
TCP 222.122.222.222:2756 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2766 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2776 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2786 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2796 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2806 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2816 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2828 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2838 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2851 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2860 52.122.120.88:80 CLOSE_WAIT 2144
TCP 222.122.222.222:2870 52.122.120.88:80 CLOSE_WAIT 2144
.......
发现本地在访问一个外网地址的80端口,对应PID是2144
2.命令行下输入 tasklist|findstr "2144" 查看 PID对应的进程
w3wp.exe 2144 services
看起来是一个网站,这时突然想起来,不久前发布了一个webservice,主要功能是用httpwebrequest分析提取某个网站的部分内容,返回给调用方
3.命令行下输入 C:\Windows\System32\inetsrv>appcmd list wp
WP "5648" (applicationPool:testmozhou)
WP "5664" (applicationPool:tqh.xxx.cn)
WP "1544" (applicationPool:www.lxxxg.com)
WP "2144" (applicationPool:data.tt.com)
确认问题来源,webservice多线程下,每个httpwebrequest没有及时释放问题所致
参考文章:http://blog.zhaojie.me/2010/08/lack-of-dynamic-ports-when-frequently-open-and-close-socket.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。