订餐系统之定时器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 ...
随机推荐
- MySQL 调优基础(五) Linux网络
1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但 ...
- mysql截取longblob类型字段内一小块数据的方法
由于longblob类型的字段内容一般都好大,最大限制是4G,所以在数据查询中读取一整块数据的方式是不现实的,这需要要截取的方法来获取需要的数据. 方法如下: hex(substring(A, ind ...
- iNeedle系统之国舜项目
一.简介 本周公司接了一个小项目,是给北京国舜科技股份有限公司做一个HTTP相关的小功能产品.大概实现功能是将交换机的源数据通过解析,分析出HTTP包配对的request和response头,并把每对 ...
- System V IPC(1)-消息队列
一.概述 System V三种IPC:消息队列,信号量,共享内存.这三种IPC最先出现在AT&am ...
- html特殊字符的html,js,css写法汇总
⇠ 箭头类 符号 UNICODE 符号 UNICODE HTML JS CSS HTML JS CSS ⇠ ⇠ \u21E0 \21E0 ⇢ ⇢ \u21E2 \ ...
- css多栏自适应布局
css多栏自适应布局还是需要总结一下的,都是基本功. 一般使用position属性布局,或者用float属性布局,也可以使用display属性. 看资料说position适合首页布局,因为首页内容往往 ...
- [转]在ASP.NET开发中容易忽略的2个小问题 Cookie乱码存取异常 和 iframe弹框的login跳转
本文转自:http://www.cnblogs.com/outtamyhead/p/3642729.html 本文地址:http://www.cnblogs.com/outtamyhead/p/364 ...
- 有评论就是我最大的动力~MySQL基础篇完结(存储引擎和图形化管理工具)
hi 今天登上来,发现竟然有了3个评论~~加油吧! 这周的计划其实远远没有达到,然后下周还有一大堆事情...那么...周末好好玩吧~ 今天试图完结MySQL的基础篇知识,小白变为大白? 1.MySQL ...
- Lucene TF-IDF 相关性算分公式(转)
Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很 ...
- plain framework 1 版本更新 1.0.2 增加打包插件
由于个别因素,该框架的文档没有及时的更新到博客上,但是离线的文档已经完成.本次更新对框架来说显得比较重要,因为在文档的编写过程中经过再次的阅读代码修复了不少错误,最主要的是统一了整个框架的标准风格.对 ...