- 论坛徽章:
- 0
|
光说情况有什么用?把代码贴上来,特别是你线程处理那一段.
samlumengjun 发表于 2010-06-01 14:28 ![]()
这是smalloc对这个问题的分析。
QUOTE:既然你的没问题,那就是"RPC机制"有问题.总之会是linux的问题.
除非你门自己改动过OS
smalloc 发表于 2010-05-31 14:33
代码没有办法从公司考出来,请谅解。
今天在公司调这个内存耗尽问题的时候,我将除了具备发送功能的main线程以外的所有线程操作全部屏蔽掉,只用RPC下发送数据的函数来连续发送模拟数据,结果发觉随着数据的不断网络发送,该RPC服务器进程所占内存仍然不断地增加,所以我断定问题就出在这里。
由于这个RPC发送函数是从VTI给的小demo例子来的,所以我也没有怀疑过它会出问题,只不过在上面修改成我的数据而已。在该发送函数内中,有如下定义:
{
static Device_ReadResp result;
....
xdr_free(xdrproc_t)xdr_Device_ReadResp,(char*)&result); //据说是释放上一次分配的内存等资源,该发送函数中无free样的函数
....
result.data.data_val = (char *)malloc(sizeof(char*)num_bytes); // num_bytes为我从windows客户端指定的字节数,为16386Byte。
...
//将我要发送的数据填入result.data.data_val中
....
return &result;
}
当上面的函数体执行完毕后,就将数据发送出去了。
在该发送函数中查看前后两次的地址时,该指针的地址值都是不断地上升,前后两次显示的地址值差为16392Byte。
我尝试着将其xdr_free注释掉,换成我的free(result.data.data_val),但是该程序一启动开始传数,就报段错误。而且对那个result的static变量,我不知道该如何处理才好。
请各位多指点。非常感谢。 |
|