TUXEDO启动时报Cannot allocate memory_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3510 | 回复: 1   主题: TUXEDO启动时报Cannot allocate memory        下一篇 
轻舞飞扬
注册用户
等级:新兵
经验:71
发帖:2
精华:0
注册:2013-3-6
状态:离线
发送短消息息给轻舞飞扬 加好友    发送短消息息给轻舞飞扬 发消息
发表于: IP:您无权察看 2014-9-24 9:06:34 | [全部帖] [楼主帖] 楼主

如题:

编译完成动态库后,启动tuxedo报错。

exec tux_aaa-A -e /cbs/log/err.log -o /cbs/log/out.log -- -S aaa:
tux_aaa: error while loading shared libraries: libtr_aaa.so: failed to map segment from shared object: Cannot allocate memory
CMDTUX_CAT:819: INFO: Process id=13810 Assume started (pipe).


编译动态库命令为:

gcc -o libtr_aaa.so -shared -fPIC $HOME/obj/*.o


操作系统为:RHEL5.3

系统内存大小为1G

ulimit属性为 ulimit -m unlimited

网上查询出的方法都试过了,问题依然,直接执行tux_aaa也会报错:

tux_aaa: error while loading shared libraries: libtr_aaa.so: failed to map segment from shared object: Cannot allocate memory


还请各位大侠解释为什么。

我用cat /proc/swaps查看了一下。

Filename                                Type            Size    Used    Priority
/dev/mapper/VolGroup00-LogVol01         partition       2097144 226956  -1
free -m
total       used       free     shared    buffers     cached
Mem:          1010        497        513          0         17        264
-/+ buffers/cache:        215        795
Swap:         2047        221       1826


后使用RHEL4,内存1.5G的编译,

使用:cc -o libtr_aaa.so -shared -fPIC $HOME/obj/*.o

问题同样。

该目录下有3000多少.o文件,尝试只使用其中20个左右,可以正常编译出服务,同时启动服务。

free -m
total       used       free     shared    buffers     cached
Mem:          1518        925        592          0         52        712
-/+ buffers/cache:        160       1357
Swap:         1983          0       1983


正常启动时内存使用情况如上。

后用strace查看:

可正常启动时:

old_mmap(NULL, 291216964, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xa6a46000


不能正常启动时:

old_mmap(NULL, 323745088, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = -1 ENOMEM (Cannot allocate memory)


现问题是无法定位这个到底是编译时的问题,还是操作系统问题?还是别的什么问题?

PS:


编译服务的脚本为:

buildserver -v -f "-ltr_$server" -f "$DLIBS" -f "$ORALIBS -lm -lc " -o "$RUNDIR/bin/tux_$server.new" -s "$server"_01:RUNSERVER -s "$server"_02:RUNSERVER -s "$server"_03:RUNSERVER




赞(0)    操作        顶端 
koei123
注册用户
等级:大校
经验:4196
发帖:16
精华:0
注册:2011-7-21
状态:离线
发送短消息息给koei123 加好友    发送短消息息给koei123 发消息
发表于: IP:您无权察看 2014-9-28 18:00:16 | [全部帖] [楼主帖] 2  楼

3千多个.o,直接搞近一个.so,最后生成的这家伙也太大了吧,加载不进去估计也正常。
就按楼主说的,找其中真实有效的那些.o,编译生成就可以了。
否则估计内核参数的数据段,代码段等核心参数都得调大。



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论