当前位置: 技术问答>linux和unix
为什么不能分配内存
来源: 互联网 发布时间:2016-11-15
本文导语: 运行一段时间perror报错如下: :Cannot allocate memory TOP此时打印如下: Mem: 261060K used, 140316K free, 0K shrd, 3072K buff, 36812K cached CPU: 70% usr 0% sys 0% nice 10% idle 0% io 20% irq 0% softirq Load average: 0...
运行一段时间perror报错如下:
:Cannot allocate memory
TOP此时打印如下:
Mem: 261060K used, 140316K free, 0K shrd, 3072K buff, 36812K cached
CPU: 70% usr 0% sys 0% nice 10% idle 0% io 20% irq 0% softirq
Load average: 0.62 0.97 1.14
PID PPID USER STAT VSZ %MEM %CPU COMMAND
25927 1 root R 339m 86% 80% ./app.bin
# ulimit -a
time(seconds) unlimited
file(blocks) unlimited
data(kb) unlimited
stack(kb) 1024
coredump(blocks) 0
memory(kb) unlimited
locked memory(kb) 32
process 3200
nofiles 1024
vmemory(kb) unlimited
locks unlimited
#
此时手工运行其他程序没有问题。
为什么就不能分配内存了?
谢谢。
:Cannot allocate memory
TOP此时打印如下:
Mem: 261060K used, 140316K free, 0K shrd, 3072K buff, 36812K cached
CPU: 70% usr 0% sys 0% nice 10% idle 0% io 20% irq 0% softirq
Load average: 0.62 0.97 1.14
PID PPID USER STAT VSZ %MEM %CPU COMMAND
25927 1 root R 339m 86% 80% ./app.bin
# ulimit -a
time(seconds) unlimited
file(blocks) unlimited
data(kb) unlimited
stack(kb) 1024
coredump(blocks) 0
memory(kb) unlimited
locked memory(kb) 32
process 3200
nofiles 1024
vmemory(kb) unlimited
locks unlimited
#
此时手工运行其他程序没有问题。
为什么就不能分配内存了?
谢谢。
|
程序很大的话,有没有频繁地释放内存再申请内存?
这样可能会造成大量的内存碎片,有可能会导致内存不足。
如果这样的话建议自己写一个内存池来管理内存。
|
你在系统中看到的资源是你机器的总资源,你程序内可用的内存是3G,你分配没有回收的时候会造成你程序可用的内存不断减少,而你没有回收的内存会被移动到缓冲区,也许只是被标记已分配,并没有真正占用物理内存。
你另外启动一个进程系统又给了它另外3G的可用空间当然没有问题了。
程序越大越需要注意内存的使用,否则很容易造成内存泄漏,最后你的程序就无内存可用,只能关掉重来。
|
因为你之前申请的没释放?
|
看一下错误号嘛