The embodiments of the present invention provide a method and system for resolving memory leaks by creating a parent process through the leak call layer, creating shared memory for the parent process so that the parent process and the child process associated with the parent process communicate through the shared memory, in which the shared memory has a shared identity, and creating a child process associated with the parent process. The child process has a child process identity; the sensitive code of the leak call layer is stored in the child process and executed, and the execution result is written into the shared memory. The parent process reads the execution result of the child process according to the shared identity and returns to the non-leak call layer. In the case of known memory leak in the invoked layer, it is still safe to call its interface without causing memory leak in the invoked layer.
【技术实现步骤摘要】
一种解决内存泄漏的方法和系统
本专利技术涉及通信
,尤其涉及一种解决内存泄漏的方法和系统。
技术介绍
在计算机软件系统实际开发过程中,经常碰到内存泄漏的问题,解决办法一般是使用相应的工具逐步调试定位程序代码,把导致内存泄漏的代码找出来修正,但是如果没有该模块的代码则此办法就行不通。有的时候即使有代码,但是代码量太大,结构很复杂,导致查找定位修改起来成本太高,在实际项目开发中可操作性很低。还有一种内存泄漏是调用方式或使用场景导致的,如java服务进程使用多线程并发调用openssl开源库接口。openssl是常用的开源库,虽然整个库支持多线程调用,但是实际使用发现很多接口都存在比较明显的内存泄漏,由于其代码量大、结构复杂,如果采用直接修改代码的方式来修正内存泄漏的问题就变得异常困难。采用java实现的web服务后台是以单进程java虚拟机的形式运行,为了提高对外服务性能内部采用多线程并发形式,这种常用方式调用openssl会导致内存泄漏,随着业务量的增长最终造成服务进程因耗尽内存资源而被操作系统杀掉。急需一种解决方案可以在已知被调用层存在内存泄漏的情况下,仍然可以放心的调用其接口而不会使调用层因此产生内存泄漏。
技术实现思路
本专利技术的实施例提供了一种解决内存泄漏的方法和系统。本专利技术提供了如下方案:对所述泄漏调用层创建父进程;对所述父进程创建共享内存,以使所述父进程与所述父进程相关联的子进程通过所述共享内存通信,其中所述共享内存具有共享标识;创建与所述父进程相关联的子进程,其中所述子进程具有子进程标识;将所述泄漏调用层的敏感代码存入所述子进程中执行, ...
【技术保护点】
1.一种解决内存泄漏的方法,其应用于泄漏调用层以及非泄漏调用层,其特征在于,包括:对所述泄漏调用层创建父进程;对所述父进程创建共享内存,以使所述父进程与所述父进程相关联的子进程通过所述共享内存通信,其中所述共享内存具有共享标识;创建与所述父进程相关联的子进程,其中所述子进程具有子进程标识;将所述泄漏调用层的敏感代码存入所述子进程中执行,并将执行结果写入所述共享内存,以使所述父进程根据所述子进程标识在所述共享内存中等待所述子进程执行;当所述子进程执行结束后退出,所述父进程根据所述共享标识读取所述子进程的执行结果,并返回至所述非泄漏调用层。
【技术特征摘要】
1.一种解决内存泄漏的方法,其应用于泄漏调用层以及非泄漏调用层,其特征在于,包括:对所述泄漏调用层创建父进程;对所述父进程创建共享内存,以使所述父进程与所述父进程相关联的子进程通过所述共享内存通信,其中所述共享内存具有共享标识;创建与所述父进程相关联的子进程,其中所述子进程具有子进程标识;将所述泄漏调用层的敏感代码存入所述子进程中执行,并将执行结果写入所述共享内存,以使所述父进程根据所述子进程标识在所述共享内存中等待所述子进程执行;当所述子进程执行结束后退出,所述父进程根据所述共享标识读取所述子进程的执行结果,并返回至所述非泄漏调用层。2.根据权利要求1所述的一种解决内存泄漏的方法,其特征在于,包括:预先采用共享内存的方式定义所述父进程与所述子进程之间的通信数据。3.根据权利要求1所述的一种解决内存泄漏的方法,其特征在于,所述创建与所述父进程相关联的子进程,包括:在调用有内存泄漏的接口之前,使用Linux下fork函数创建所述与所述父进程相关联的子进程。4.根据权利要求1所述的一种解决内存泄漏的方法,其特征在于,所述敏感代码包括:导致内存泄漏的的代码和/或第三方接口代码。5.根据权利要求1所述的一种解决内存泄漏的方法,其特征在于,所述父进程根据所述子进程标识在所述共享内存中采用非阻塞方式等待所述子进程执行。6.根据权利要求1所述的一种解决内存泄漏的方法,其特征在于,所述所述父进程将读取所述子进程的执行结果返回至所述非泄漏调用层之前,清理所述共享内存。7.一种解决内存泄漏的系统,其应用于泄漏调用层以及非泄...
【专利技术属性】
技术研发人员:赵永宽,宁红宙,
申请(专利权)人:航天信息股份有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。