开始我的程序是一个多进程运行的程序负责给另外一个服务器提供服务,但是由于多进程运行时候涉及到一个都要用到的文件数据,而每个进程都需要将它读入内存,这样导致占用内存过大。于是我想到了用:1,进程间共享数据 2,改为多线程 , 这两种方式来修改程序。考虑到综合因素,决定用多线程来做。
改为多线程(10个线程)后,程序运行开始15分钟左右能正常提供服务,后来自动退出。 查看日志,总是报错:*** glibc detected *** double free or corruption (out): 0xa2d01c68 *** .而且打印日志的时候,大部分时候是在某个函数(serve())中退出,但是前15分钟的时候,却没有退出。
所以我就想请问:1,主线程和子线程的关系问题。 是不是有一个子线程异常退出,主线程就会一起跟着退出呢? 2,有什么好办法可以跟踪调试多线程的程序呢? 3,这个问题大概会是由于什么原因呢?是互斥量的使用吗?
谢谢各位高手。
10 个解决方案
#1
core dump了吧,代码写得有问题. ulimit -c unlimited让它core出来看看那个core...
#2
core代表了什么,怎样分析core呢?这方面我还是第一次接触,所以比较生涩。麻烦了。
#3
shell 里执行 $ulimit -c unlimited ,core产生在程序的执行目录下
然后执行 $gdb 程序名 core
在gdb里打bt(首先要确定程序编译时加了参数-g),就可以看到是哪里造成的core
然后执行 $gdb 程序名 core
在gdb里打bt(首先要确定程序编译时加了参数-g),就可以看到是哪里造成的core
#4
我在运行程序的目录下,执行了ulimit -c unlimited,但是没有生成core文件。
是不是生成core有什么前提呢?谢谢。
是不是生成core有什么前提呢?谢谢。
#5
呵呵,你不是说你程序运行了一段时间才退出去的嘛,等它退出去的时候,你再去找一下core文件,这段时间内,不要退出当前shell
#6
哦,明白。谢谢。
#7
哇,这个core还不知道生成到哪儿去了,我先看看相关的有关core的资料吧。要不然跟你交流起来很麻烦,谢谢啊
#8
core dump在你程序的目录下面
#9
Google一下 core dump即可.
#10
看了一下,对core大概了解了。但是,程序目录下没有生成core文件,是不是在其他目录了呢?
#1
core dump了吧,代码写得有问题. ulimit -c unlimited让它core出来看看那个core...
#2
core代表了什么,怎样分析core呢?这方面我还是第一次接触,所以比较生涩。麻烦了。
#3
shell 里执行 $ulimit -c unlimited ,core产生在程序的执行目录下
然后执行 $gdb 程序名 core
在gdb里打bt(首先要确定程序编译时加了参数-g),就可以看到是哪里造成的core
然后执行 $gdb 程序名 core
在gdb里打bt(首先要确定程序编译时加了参数-g),就可以看到是哪里造成的core
#4
我在运行程序的目录下,执行了ulimit -c unlimited,但是没有生成core文件。
是不是生成core有什么前提呢?谢谢。
是不是生成core有什么前提呢?谢谢。
#5
呵呵,你不是说你程序运行了一段时间才退出去的嘛,等它退出去的时候,你再去找一下core文件,这段时间内,不要退出当前shell
#6
哦,明白。谢谢。
#7
哇,这个core还不知道生成到哪儿去了,我先看看相关的有关core的资料吧。要不然跟你交流起来很麻烦,谢谢啊
#8
core dump在你程序的目录下面
#9
Google一下 core dump即可.
#10
看了一下,对core大概了解了。但是,程序目录下没有生成core文件,是不是在其他目录了呢?