作者 |
|
vlv [个人空间]
注册  2018-08-31 发贴数 3 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
|
服务器端server还在运行,但客户端连接不了。 只能强制重开服务器端。 是否有个工具来检测服务端是否真的卡死了还是假的卡死状态呢? 如传输心跳信息或者带外数据? |
|
|
|
|
mevmev [个人空间]
注册  2017-03-15 发贴数 157 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
|
一个思路供参考:服务器端开启日志,用外挂定时读取最新的日志,如果最后一条日志与读取时间相差太久,则判定服务器端已挂,结束进程并重启程序。 |
|
|
|
|
flytosky [个人空间]
注册  2017-01-21 发贴数 2 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
|
确实有这个问题,我之前向作者反映过。具体的表现是server的进程还在,7777端口不见了,只剩下7771端口。 我现在的办法是写个powershell脚本定时检测7777端口,如果不正常就杀死进程再重新运行,目前效果良好。通过脚本日志分析,这个问题有可能跟windows系统更新有关。 |
|
|
|
|
flytosky [个人空间]
注册  2017-01-21 发贴数 2 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
|
分析了一下这两个多月的脚本日志,客户端突然连接不上有两种情况: 1、windows系统因为更新等原因,造成server进程终止,日志显示为: 09/12/2018 07:56:56: 端口7777监听正常,PID: 3964 09/12/2018 08:05:22: 监听端口7777不存在。 09/12/2018 08:05:23: 主程序未启动。 09/12/2018 08:05:23: 正在启动主程序... 09/12/2018 08:05:23: 主程序启动成功。 09/12/2018 08:10:09: 端口7777监听正常,PID: 2840 这是今天的日志,我查了一下,windows系统在7:57自动更新了系统 2、server进程在,7777端口不见了,日志显示为: 08/29/2018 15:45:11: 端口7777监听正常,PID: 3872 08/29/2018 15:50:32: 监听端口7777不存在。 08/29/2018 15:50:32: 主程序已启动,端口7777无效,正在终止PID: 3872 08/29/2018 15:50:37: 正在启动主程序... 08/29/2018 15:50:37: 主程序启动成功。 08/29/2018 15:55:36: 端口7777监听正常,PID: 4812 这种情况近3个月发生了两次,原因未知。 我的系统是windows 2012 R2 + sql server 2012 |
|
|
于 2018-09-12 11:36 被 flytosky 修改
|
|
qqq [个人空间]
注册  2018-09-12 发贴数 1 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
laughtiger [个人空间] QQ名 天天笑
注册  2011-05-06 发贴数 76 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
|
我编了个守护进程,就是监测服务端口,如果端口不通则重启服务。 |
|
|
|
|
laughtiger [个人空间] QQ名 天天笑
注册  2011-05-06 发贴数 76 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
htc [个人空间]
注册  2017-12-30 发贴数 538 精华数 0 原创贴 0 来自 状态 正常
级别 会员 |
|
|
using System; using System.Diagnostics; using System.Net; using System.Net.Sockets; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { IPAddress ip = IPAddress.Parse("127.0.0.1"); IPEndPoint point = new IPEndPoint(ip, int.Parse("7777")); try { TcpClient tcp = new TcpClient(); tcp.Connect(point); Console.Write("端口正常"); } catch (Exception ex) { Console.Write("端口不正常!"); Console.WriteLine(); Console.Write(ex.Message); Console.WriteLine(); foreach (Process p in Process.GetProcesses()) { try { if (p.MainWindowHandle == IntPtr.Zero) continue; if (p.ProcessName == "server.ex") { Console.WriteLine(p.ProcessName + ":"); Console.WriteLine(); Console.WriteLine(p.MainModule.FileName); } } catch (System.Exception exp) { Console.WriteLine(exp.Message); } } } Console.WriteLine(); Console.ReadLine(); } } } |
|
|
|
|