如题:
编译完成动态库后,启动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