数据库程序操作的不稳定,本人用了一些DELPHI的数据库控件,发现在对相关数据库进行频繁操作时,应用程序内存不断增加,请大家指教!(100分)

  • 主题发起人 主题发起人 baddy
  • 开始时间 开始时间
to door2000:不太可能,业务规则会变化,新业务会不停地加入
to mikegong:现在已经是一台数据库服务器,一台应该程序服务器了!

请大家支持啊!!
 
三层,那应该把全部业务逻辑做到应用服务器端,把数据处理放在线程执行,完毕就废掉,有新的就重开。
可能慢了点,内存该不会吃完吧?你的问题我都没机会碰到,只是想当然的说说,还望原谅
 
看我的必杀技,对于一个可伸缩的企业级应用来说,应该有服务器程序进行管理的机制,
它能够随时监看并控制有业务逻辑的应用服务器,你的解决办法是这样:不要管理内存的
问题,你的目的是保证服务器稳定的运行,所以,1.将应用服务器作成无状态的CORBA服务器(名为A),

2.作一个应用服务器控制器管理应用服务器(名为B)。3,启动B。4,启动多个A提供服务。
5.由B定时(或手动)根据A的反应开启和关闭众多的A。6.CORBA机制能够提供负载动态平衡,无状态机制能够保证服务器体面
不受影响的安全退出。这才是真正的解决方案。
 
请问大家有没有针对于SQL执行之后如何去清空所占用的缓冲内存的方法,其它的与我们的
服务器与系统的改造要求不太现实!希望大家支持,高手在哪儿???

救命啊!
 
我现在正在开发同样的一个系统,现在已经到了测试阶段,但是我在客户机上运行是发现
系统没有调用多线程,由于我没有进行打包发布,不知楼上有没有遇到过这样的问题,同时
我也担心我的程序在7X24运行后会出现同样的问题。
 
出问题的原因可能有:
1.Zero控件包有问题
确认/排除方法:用一个逻辑最简单的测试工程试验,确保用到了在主工程中所用到的全部Zero控件/方法
2.多线程问题
确认/排除方法:白盒:看线程代码中有没有关键资源存在;黑盒:临时改写成单线程程序测试能否正常运行。
3.数据库设置问题
确认/排除方法:试试使用数据库出厂设置,虽然性能可能不佳,但是一般不会有这种内存问题;
如果没有涉及商业数据库具体特性,可以换成其他数据库试试。
4.编码漏洞:
确认/排除方法:查找所有的for/while循环,详细检查他们涉及对象创建等内存相关语句。并且确保每次
创建/释放都有相应的try...finally..end块保护。
另外,查找所有的Exit;语句,这个语句非常容易在内存方面闯祸。
5.未知异常:
确认/排除方法:写Application的OnException事件,每次事件都加以记录,写入日志。
6.其他:
使用BoundChecker,MemProof等工具跟踪吧!
7.内存碎片:既然用M$ Windows就认倒霉吧。
 
如果真的如iamweng所说是SQL执行之后未释放,那么最好跟踪到Zero代码内部去看一看。
另外找出内存丢失的规律也是很重要的,比如运行多长时间会丢多少内存,这样才有可能在调试的时候重现。
 
用boundchecker没有发现什么内存问题,在IDE环境下也没有提示任何的异常,但是内存照样
在增加,所以这样的问题让我头疼,每个线程都是一个死循环似的函数,只是每个函数里有对
数据库的操作!
 
我想提个建议,你可以隔一段时间把你的数据库连接,如BDE的DATASET断开一下,然后在
连接,这样应该可以释放掉所有的专用内存。我的系统也是不停机,一天提交2-3万条数据,
而且是图象,没有内存问题。再不行,你可以试试NT怎么样,我一直觉的2000的内存管理
有问题。
 
我想你需要对你的程序进行检查,可能你的问题出现在线程的管理上,因为线程一般都是
自动管理的,可能是程序里的某些线程在占用这些内存。无法自动释放。
 
我看你先暂时改成单线程试运行一下,先不管性能,把多线程排除了或者确认了就会容易一些。
另外,试试给多线程里面的数据库访问部分加互斥,如果确实是多线程问题,我猜测可能是数
据引擎的内部实现中存在全局变量或类变量,而这个变量指向了动态分配的内存块。
 
感谢大家的支持,现在可以肯定的是:这决不是多线程的问题,因为我另一个单线程的程序
也会出现同样的问题,现在我在测试是不是定时器的问题,当然最大的可能还是在于数据库
控件上的问题,对了,大家有没有什么经验,做这样的数据库程序有更好的控件或是其它方
法来处理与数据库交互处理的???
 
我也曾经遇到过类似问题,开始我用的控件是table控件,程序运行不到1天1夜就死掉了。
而且原因不明,烦了我很久,后来把控件全部换成Query控件,奇迹出现了,连续运行个把
月都安然无恙。所以你可以考虑换控件。
 
他用的就是TQuery
 
我也有一个程序,运行了快一年了,使用的是MIDAS,基本上不会有这种问题阿。
我觉得可能是每个连接都存在一个连接状态,而当连接端掉的时候,后台并没有端掉,
导致内存持续增加,如果使用无状态连接,可能可以解决这个问题。
只是建议而已,或许有更好的方法。
 
感谢大家的支持与帮助!
我想大家都有可能为了一个问题而花费我们大量的时间和精力的事,但是在解决了之后心情
还是挺好的,这个问题算是解决了,不过不是针对ZEOS而解决的,在查询了大量的ZEOS国外
网站的相关内容后,发现是控件对ORACLE技术支持上有点不太完美,明白一个道理:万事不
是完美的,它对MYSQL,MSSQL支持得很好,对于ORACLE去不太理想,因为我的系统是从MYSQL
上转移过来的,所以一直对它有期望,说实在的,对于前段时间我感觉好累,现在解决了,
感觉一身轻松,如果可能想花时间在数据库上,希望以后写代码碰到相关问题能力会有提高。
写代码已经有一年多了,对于以前自己走过的路,选择的工作至今不悔,可是对于我们的前
途却多了几份迷惘。。。。。。

分不多,谁多谁少,大家见谅!
再次感谢大家的真心诚意!
 
后退
顶部