Delphi开发的后台服务程序也可以7x24小时长时间稳定运行
来源:互联网 发布:播放dsd软件 编辑:程序博客网 时间:2024/05/17 11:06
现在用Delphi的人越来越少了,不过没关系,编程的经验应该是可以相通的,并不限于某种语言工具。我最开始也只是用C/C++,但后来我发现Delphi也挺好,在日常的信息系统开发中更具优势,因此就更偏向于用Delphi了。
相信很多人跟我一样,有这么一种感觉:Delphi只适合开发前端界面程序,开发后台服务则会不稳定,后台还是用Java或VC比较好。这种感觉一定程度上是有道理的,毕竟Delphi容易入门,其编程模式又使得入门后的程序员偏向于以界面为中心,重UI而轻结构,这些显然都不适用于后台服务开发。
但其实这些都是程序员的问题。Delphi只是一个编程工具,不能因为它的界面功能强就否定它生成的程序稳定性。其实用它来写无界面的程序也是完全OK的,只是需要注意一些细节。这里我按自己的经验做个小结,如下:
1.最重要的,是要自己接管内存分配,开辟内存缓冲池。
原因很简单,WIN32下一个进程只有2G内存空间,服务程序要长期运行,就会不断地申请和释放内存,而且不但会申请小块的零碎内存,经常也会需要申请连续的大片内存,如果任由系统无限制的循环分配释放内存,那么很快你的程序空间就会充满零碎的内存,这时再要申请连续的大片内存就会失败,导致程序崩溃了。这些都是我们有过的惨痛经历得来的教训,服务死掉的最常见原因,就是猛占内存,直到系统资源不足。
所以,除非你能自己搞一个内存碎片整理功能,否则你一定要接管内存分配,把所分配的内存记下来,重复使用。不然的话,想要长时间运行,除非你的服务线程什么都不干。
从这一点来看,Java适合做后台服务也是有道理的,最起码它的垃圾回收机制,为我们解决了内存的问题。
2.对象缓冲池,对于经常要重复创建、释放的对象,一律用缓冲池管理。
原因类似上面,但不限于内存。如线程对象、位图对象、数据连接、查询组件等等,只要服务中经常用到的东西,一律放入缓冲池中。缓冲池一般都会设置最大值,达到上限时就需要排队等待了;不然的话,连接用户一多,再多的资源也顶不住。
3.日志功能。
对于没有界面的后台服务来说,日志的重要性是不言而喻的。日志需要记录服务的运行状态、用户操作、错误异常堆栈、内存性能警报等。服务程序中的CPU内存资源非常宝贵,因此日志中需要对占用CPU和内存资源多的操作进行重点记录。开发阶段如果有出现运行时间长的情况,应在代码中加上运行时间的检测日志,供分析排查。
4.负载均衡与容错处理。
服务程序要想长时间运行,就得支持多实例分摊负载。当其中一个服务出现问题时,可转到其它服务,这样最多只影响当时未保存的少量操作,不影响整体使用。
5.拷机测试。
服务上线前,一般都需要进行长时间的大负荷运行测试,这时一般都需要有客户端请求来配合。可用现成的测试工具,如LoadRunner、QTP之类的。我比较倾向于自己写随机模拟测试程序,比较接近现实情况。
6.运行监控。
需要另外再有一个程序对服务进行监控,一旦发现异常,立即发送邮件和短信通知相关负责人。这种程序不难,可自己写一个;不想写的话也有现成的,网上搜索一下就能找到。
7.远程管理,可对异常进行处理。
人力毕竟有限,谁也难以保证永远不出问题。因此远程管理是非常必要的。如对于异常的侍服线程,可远程强制结束;可远程查看日志,采取相应措施;实在不行,还可以远程控制服务重启。
8.其它没想到的...(此处略去128K个字,呵呵)
写了这么多,发现似乎跟Delphi没什么关系。其实,只要是写服务程序,都会遇到类似的问题。使用的工具不同,但做事的方式和结果是一样的。只要能注意这些细节,用什么写都一样,都可以放心地7x24小时长时间稳定运行。只是...呃...要全做到太不容易了,估计只有大公司才行吧,我自己也只能做到其中一部分而已。
- Delphi开发的后台服务程序也可以7x24小时长时间稳定运行
- 多线程高性能 7x24小时 Java NewIO 程序 小结
- android 后台服务长时间运行---解决方案
- iOS 程序后台运行保持程序后台长时间运行
- IOS后台长时间运行的多种方法
- android 创建后台运行的服务程序
- 阿里巴巴花了7年造出的阿里云,靠什么实现“7x24小时在线”?
- 后台长时间运行
- ios后台长时间运行
- winXP(同时也适用于win7)系统使用打印机时“后台处理程序服务没有运行”时的解决办法
- 构件稳定的运行程序。
- 后台服务程序开发
- 长时间运行的PHP程序解决方案
- windows 7 后台服务程序开发
- windows 7 后台服务程序开发
- 退出app,后台推送的服务也停止了,怎么可以做到不停止后台服务呢?
- ios实现长时间后台运行
- ios实现长时间后台运行
- Silverlight实例教程 - Validation用户提交数据验证捕获
- J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(五)
- 一个关于HashSet序列化的问题
- Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议
- Delphi开发的后台服务程序也可以7x24小时长时间稳定运行
- 粒子编辑的改进
- 【zz】音视频同步原理[ffmpeg]
- ubuntu linux qq自动退出关闭的问题解决方法
- 使用AWS服务和Geoserver创建免费云GIS:安装Geoserver到AWS Free Usage Tier
- linux中C程序运行时怪异的段错误--linux中因栈空间不足而出现的运行时段错误
- 疯子的研究:瘫痪整个互联网绝非天方夜谭
- 查看linux中查看程序使用了多少栈空间及使用了多少堆空间
- 好问题!也导入了类,该类的父类也具有这个方法,但是呢!就是调不到,你是不是感到郁闷呢?看我的播客吧!就是解决这个问题的!