记: 一次惊心动魄的解决 服务器 无解问题的心路历程

  2017年1月20日

  今天算是一个令人激动的日子了,为什么这么说呢?唉,一把鼻涕一把泪啊~总算把服务器的一个巨大Bug给解决了!

  事情的起源是这样的。由于我们公司里面是有两个服务器,一个是Web 服务器,一个是数据库服务器,由于之前的业务原因,需要将两个服务器合并到一起,所以就决定把数据库服务器关闭,将数据迁移到网站服务器,在一天晚上,一切都进行顺利。就这样过了差不多一周的时间后。我们系统的后台网站时不时会出现  如下问题:  

无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection 的值,确保服务器接受远程请求。如果服务器位于本地计算机上,并且上面提到的注册表值不存在或者设置为 0,则状态服务器连接字符串必须使用“localhost”或“127.0.0.1”作为服务器名称。

  我相信有很多人遇到过这样的问题,但是这样的问题对我来说很简单,只需要开启服务器的 ASP.NET 状态服务 就可以了,轻松解决。但是你知道有什么诡异的事情发生了吗,我检查服务器这一切都是正常的,但是还是有这样的问题出现,并且这个问题它不是一直出现,而是时不时的会出现这个问题,特别恼火,不管我怎么在网上查资料,怎么修改配置,一切都无济于事, why??? 以前这个问题都是很轻松解决的,为什么这次就不行了呢?这种问题也没有办法可以在本地调试的,所以问题肯定是处在服务器这边的,但是所有的配置都没有动过,为什么还是不行呢?我甚至想到了重启服务器,但是每次重启之后,过不了几个小时,又会出现这个问题,我就无语了,我不可能有问题就重启服务器啊,这肯定不行啊!我期间还怀疑是数据库迁移的问题,但是我想想这能有什么关系吗,也不可能啊,跟数据库肯定没关系的,还是另寻他路吧。

  我还想到过更新服务器的补丁,但是更新过还是不行!怎么办啊!我都开始怀疑人生了,这个问题一直困扰我差不多三天了,期间还出现过服务器CPU达到100%,我去,这怎么办啊!后来,我发现用我们系统去下订单,出现了一个以前没有遇到的新问题,

1 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作......

  看到这个问题,我顿时兴奋了,我明白了,肯定是这个问题导致的,并不是上一个ASP.NET 状态服务 的问题导致的,我感觉终于有救了。我开始上网找这个问题的解决方案,但是找到的方案让我心灰意冷,什么虚拟内存不够,什么磁盘空间问题,什么修改注册表的值,什么访问量太大,端口不够的问题等等,经过分析,我都觉得不会是这些问题导致的,我们访问量一天也不多,几百个就不错了,怎么可能是这些问题呢...感觉心里又失落了,唉怎么办,但是我知道一定是这个问题导致的,必须从这个问题入手才行,

所以我坚持继续根据这个问题查资料,根据我慢慢分析后,开始觉得应该是程序问题,有什么死循环,或者内存泄漏,连接没有释放的相关问题,我后来看到有一个资料说是,在任务管理器查看一下进程的句柄数,然后我去查看了一下,我发现出问题的那个网站的句柄数特别多,差不多和操作系统内核一样多了,接近2000个,然后内存暂用差不多高2个G,这十分的反常,我确定了就是这个系统的问题。

  然后我重启了这个进程之后,我去网站正常下单操作,这次没有问题出现了。但是我观察发现这个进程的内存和句柄数量增长特别快,我想我不可能随时重新进程吧,还是要找到根本问题!之后我去网上查找句柄一直增长的原因,推测出可能程序中有资源一直在占用,然后未释放,端口一直增加,导致服务器问题。 最后我恍然大悟,我想起我们系统中会使用到 websocket, 并且我们服务器的websocket 服务端并没有开启, 奥~我知道了,就是这个原因,因为程序中的 websocket 一直找不到服务器,所以会一直连接,不断重连,不断开启端口,所以出现了以前描述的问题。

  啊啊啊~终于明白了,然后我启动了服务器的websocket 服务端,问题就解决了!!!

  为什么没有开启websocket 服务端呢,是因为之前程序有过改动,并不会在此服务器上使用 websocket了,但是代码中并没有取消 websocket 的请求的功能,所以现在还不能关闭websocket 服务端,后续慢慢再去改吧!!!

 唉~心累啊!通过此次的经历,主要是记录下来,遇到这样无解问题的时候,需要怎样的思路去解决问题,以此为戒!

时间: 2024-10-29 19:12:04

记: 一次惊心动魄的解决 服务器 无解问题的心路历程的相关文章

nginx解决服务器宕机、解决跨域问题、配置防盗链、防止DDOS流量攻击

解决服务器宕机 配置nginx.cfg配置文件,在映射拦截地址中加入代理地址响应方案 location / { proxy_connect_timeout 1; proxy_send_timeout 1; proxy_read_timeout 1; proxy_pass http://backserver; index index.html index.htm; } proxy_connect_timeout 1; :连接超时1秒 proxy_send_timeout 1; :请求超时1秒 pr

阿里云服务器上安装mysql的心路历程(博友们进来看看哦)

在阿里云花了100买了一台云服务器,配置如下: CPU: 1核 内存: 512MB 数据盘: 0G 带宽: 1Mbps 阿里云服务器安装mysql搞得我想吐血,搞了一个多星期,现在才搞好,而且,还有许多问号存在我的脑海里.... 说说我在阿里云服务器上安装mysql的心路历程吧,刚开始安装好java8和tomcat8,安装非常的顺利,但是我接下来要安装mysql了,在网上看到一篇帖子(是rpm包安装的,也在本机上的centos6.5安装过没有问题),所以我就按照这个安装mysql,可是失败了,报

前端开发用nginx代理服务器解决服务器跨域问题及跨域访问https访问(mac系统下)

前端开发经常遇到一些服务器由于跨域造成访问不了的情况.以前BS模式,前后端都是一个人开发,跨域问题造成的开发阻碍不是很明显,但是现在前端框架欣欣向荣,很多时候变成了CS模式的开发,但浏览器天生的跨域限制,造成了开发,特别是对单独的前端开发人员(不太懂后台开发的人)造成一定开发障碍.还好有nodejs及其一系列前端自动化工具很好的解决了开发时的问题.但今天我要说的用nginx代理来解决这个问题.我觉得很简单!以下都是基于mac系统的操作!先看没有代理时,随便访问网上一个接口, http://web

怎么解决服务器正忙,请稍后重试?

相信大家在上网的时候,或多或少都会碰见下面这种情况“登录服务器正忙,请稍后再试”那么碰见这种情况我们该如何解决呢? ?1.本地网络及浏览器配置问题 ? 首先我们要检查自己本地网络是否畅通?如果是自己网络问题的话,那就协调网络运营商去解决.其次要查看自己浏览器配置是否正确?具体配置如下图所示: ①取消勾选通过代理链接使用HTTP1.1.检查发行商的证书是否吊销.检查服务器证吊销 ②勾选“使用SSL3.0”.“使用TLS1.0选项卡,以及选择“允许运行或安装软件即使签名无效” 2.服务器出现问题 除

USBserver14口硬件服务器怎么解决服务器虚拟化识别|映射|共享USB加密狗|ukey

USB Server 是硬件的USB设备远程连接解决方案,USB Server采用1.2GHz的arm SO供一个千光网络接口和28个USB 2.0接口,满足高速应用需求.USB Server对电源做了特别确保28个USB端口均提供750mA的电流供应. 系统对国内应用得比较多的USB加密狗提供了完善的支持,有很好的兼容性.提供行业软件ukey共享,虚拟环境识别ukey解决方案,外网远程识别usb服务扫描仪共享,短信猫等.利用独有的专利技术,使得用户可以利用单一产品方案即可方便地在空间受限的环境

记一次TcpListenOverflows报警解决过程

问题描述 2015-06-25,晚上21:33收到报警,截图如下: 此时,登陆服务器,用curl检查,发现服务报500错误,不能正常提供服务. 问题处理 tail各种日志,jstat看GC,不能很快定位问题,于是dump内存和线程stack后重启应用. jps -v,找出Process ID jstack -l PID > 22-31.log jmap -dump:format=b,file=22-29.bin PID TcpListenOverflows 应用处理网络请求的能力,由两个因素决定

记一次帮网友解决非法 KILL MySQL服务引起的故障

深圳-游子 9:55:26 老乡 请教你个事 深圳-游子 9:55:29 mysql.sock 丢失,mysql启不来,请问大家是怎么解决的? Bell 10:04:41 这个文件不是动态生成的么 Bell 10:04:53 删除了,启动服务时会自动产生的 深圳-游子 10:12:02 现在启动不了 深圳-游子 10:12:15 试了各种方法启不来 一网友找我,说是使用MySQL提示如下错误: ERROR 2002 (HY000): Can't connect to local MySQL se

记一次问题的解决

上周客户为了测试在他的笔记本上部署系统的时候报“用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败”错误,上网搜了各种办法,均无法解决.重装了数据库,也没有用. 这周一(昨天)闲了一天,觉得那个问题不好解决,可能是客户电脑的问题,虽然我事不多,但不想为了这么个部署的问题浪费时间,说不定换台电脑就可以了. 今天(周二)上午验证了一下,发现连公司的数据库同样报错,想到和数据库无关.但还是找不出原因.没办法,只好重装系统.再重装数据库,然后重新部署,依然是那个问题.我一想,不

解决服务器的80端口问题

服务器在公司测试的时候,能够在局域网内正常访问,服务器托管到电信机房后,电信要求服务器和域名必须备案后,才会开通服务器的外网80端口(未备案的外网80端口关闭,外网无法通过域名和ip访问),期间经过了2个月的备案过程,后来电信通知说已经开通了外网80端口了,但是我测试的时候发现外网还是无法访问网站,于是开始有了下面的排除过程,特此记录分享. 第一步:关闭系统防火墙和其他安全软件,测试发现还是无法访问. 第二步:检查服务器上是否80端口被其他进程占用. 参考:http://jingyan.baid