订餐系统之定时器Timer不定时
经过几天漫长的问题分析、处理、测试、验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统日志中会有警告,如果您有更好的方案,也请不吝赐教。
先交代下背景吧:“订单审核后,商家3分钟内未确认的订单,自动生成催单记录,客服通过催单记录联系商家,于是,我们就用的System.Threading.Timer 来作来定时器”。下图为Timer初始化部分代码:

因为是重要客户,我们本地测试服务器都经过自认为严格的测试后,才提交正式服务器。可是,每次提交正式服务器后,每天总有几个时间段不定时生成催单记录,然后我们自己测试又都正常,于是不了了之!反复几次,客户不高兴了,领导怒了,做为程序员的我,才开始冷静了,到底哪里出了问题?
1.消失的33分钟
当然,首先,还是检查网站中程序记录的日志,因为我们定时程序是每分钟执行一次(因为是多个任务,每个任务执行的时间间隔是不一样的,所以每分钟判断哪个任务可以执行),所以日志是比较容易查询的,于是,看到了下图:

网站在这个时间点上,没任何错误信息,服务器在这个点上也没任何人为操作。当确认程序上基本没有问题,我开始查询系统日志了。
2.应用程序池工作进程被回收
知道这个时间点出问题了,在系统日志中我很快找到了此时间的日志,于是看到了下图:

原来是没有访问,被回收了,直到有人访问时,再创建进程,到这里才明白,为什么我们测试都正常,因为我们测试时,一直在访问,所以一切正常。
3.让网站自己访问自己
当知道问题后,就开始纠结处理方案了,有人说写服务器程序,创建一个服务,让此服务去生成催单,但因为是正式服务器,我们没办法链接的,所以此方案虽好,但对我们来说不切实际;google了下,找到一个自认为简单、可行的方案,如下图(不记得来源了,见谅):

发布后,测试了几个小时,呀,还真正常了,于是通知客户测试。结果,还是如前几次一样,他们一用就出问题了。只能继续查看系统日志...
4.进程在关闭过程中超出时间限制
虽然结果还是一样,但是我们离真相越来越近了,找到出错时间点前后的网站日志和系统日志,看到了下图的信息:
网站日志:

系统日志:

5.程序池配置
看到上图的问题,我最先想到的还是对程序池进行配置,之前对这方便了解也不多,也google了一个比较文明的配置,然后根据情况调整了几个参数:


修改配置后,问题依然存在,路在何方?
6.失败不可怕,再来一次!
回收时,访问失败,如果过15s再访问呢,是的,失败不可怕,再来一次,于是,有了下面的代码:

发布、测试,1小时正常,3小时正常,8小时正常,24小时正常,30小时正常,心总算能踏实了,但是回头想了下,进程都回收了,为什么再访问一次程序会执行,IIS日志中每次回收时,都只有一条访问记录,只有得空时再好好研究下了!
写了几年代码,还是第一次,通过这么多日志,特别是服务器的日志来解决问题,过程虽然漫长,但还是苦并快乐着!!!
30小时正常,也许到80小时,160小时,又会有问题了,持续关注中...
成为一名优秀的程序员!
订餐系统之定时器Timer不定时的更多相关文章
- 定时器Timer不定时
订餐系统之定时器Timer不定时 经过几天漫长的问题分析.处理.测试.验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统 ...
- Python--day41--threading中的定时器Timer
定时器Timer:定时开启线程 代码示例: #定时开启线程 import time from threading import Timer def func(): print('时间同步') #1-3 ...
- 解决windows 服务中定时器timer 定时偶尔失效 问题
最近做个windows 服务,功能是:定时执行一个任务:自动登录到一个网站后,点击相关网面上的按钮button. 在处理的过程中发现定时器老是不定时的失效,失效时间没有规律. 由于刚开始处于测试阶段, ...
- python中实现定时器Timer
实现定时器最简单的办法是就是循环中间嵌time.sleep(seconds), 这里我就不赘述了 # encoding: UTF-8 import threading #Timer(定时器)是Thre ...
- PHP框架Swoole的一个定时器Timer特性
在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计.通知等操作. 比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行.到期情况.整个项目的进度等等,根据统计情况,做相 ...
- Java进阶(十八)Java实现定时器(Timer)
Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...
- Linux应用层的定时器Timer使用详解【转】
转自:http://blog.csdn.net/wwwtovvv/article/details/8601528 版权声明:本文为博主原创文章,未经博主允许不得转载. linux下定时器的使用 -- ...
- Java中定时器Timer致命缺点(附学习方法)
简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...
- Go定时器--Timer
目录 前言 Timer 定时器 简介 使用场景 1. 设定超时时间 2. 延迟执行某个方法 Timer对外接口 1. 创建定时器 2. 停止定时器 3. 重置定时器 其他接口 1. After() 2 ...
随机推荐
- 留念 C语言第一课简单的计算器制作
留念 C语言第一课简单的计算器制作 学C语言这么久了. /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h> #include<stdlib.h ...
- 【转】在Android布局中使用include和merge标签
内容转自:http://fengweipeng1208.blog.163.com/blog/static/21277318020138229754135/ 在我们开发android布局时,经常会有很多 ...
- 【分享】4412开发板ubuntu 12.0.4播放音乐没有声音解决方法
转自迅为论坛:http://bbs.topeetboard.com 准备工作 1.下载 vim 在命令行上输入 apt-get install vim 下载 vim 2.输入 vim /etc/hos ...
- hadoop2.3cdh5.0.2 upgrade to hadoop2.5cdh5.5.0
两台机器,nn1,nn2搭建的ha,同时又担任nn,dn,rm,nm,jn,zkfc,zk等职能. 以下是升级回滚再升级的记录.仅供参考,同时参考了cdh官网的说明,官网主要是使用CM的. 1 官网上 ...
- 免费股票数据API接口
免费股票数据API接口提供沪深.香港.美国股市信息. 1.沪深股市 2.香港股市 3.美国股市 4.香港股市列表 5.美国股市列表 6.深圳股市列表 7.沪股列表 API文档:https://www. ...
- 详细解密FineReport中的报表执行过程
在报表开发工具FineReport中,报表的执行过程大体可分为两步:1.报表计算:2.页面转换. 报表计算过程:先读取我们的sql语句,将完整的sql语句传至数据库服务器,由数据库返回数据给报表服务器 ...
- Android工程师入门(二)——不忙不累怎么睡。。
安卓开发迫在眉睫,这周入个门吧! Android工程师入门(二) 四.在界面中显示图片 ImageView 是显示图片的一个控件. --属性 src——内容图片: background——背景图片/背 ...
- Java方法区和运行时常量池溢出问题分析
运行时常量池是方法区的一部分,方法区用于存放Class的相关信息,如类名.访问修饰符.常量池.字段描述.方法描述等. String.intern()是一个native方法,它的作用是:如果字符串常量池 ...
- NYOJ-756重建二叉树
重建二叉树 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!). 输入 输入有多组数据(少于 ...
- 创建MyOffice项目
创建查看评分窗体(FrmLOOK),添加定义成员数组,将员工数据绑定到FrmLOOK窗体的ListView控件上 public ListViewItem lv; private void Form1_ ...