1. 程式人生 > >system() 函式執行遇到 Cannot allocate memory

system() 函式執行遇到 Cannot allocate memory


 int iRet=system("ls -l");
 if (0 != iRet)
 {
  PRERR("system(\"ls -l\") %s",strerror(errno));
 }
執行結果:
ERR: system("ls -l") Cannot allocate memory   File:../can/can.c, Line:186, Function:init_CanFrameData 

分析:

1.

top命令:

Mem: 54580K used, 2540K free, 0K shrd, 0K buff, 20728K cached
CPU:  0.1% usr  1.3% sys  0.0% nic 98.4% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 3.92 4.06 4.10 2/131 12094
  PID  PPID USER     STAT   VSZ %MEM CPU %CPU COMMAND
 4282  2563 root     R     2156  3.7   0  1.0 top

2.

[[email protected] comm]# cat /proc/meminfo
MemTotal:          57120 kB
MemFree:            2300 kB
Buffers:               0 kB
Cached:            20732 kB
SwapCached:            0 kB
Active:            23632 kB
Inactive:          15012 kB
Active(anon):      17928 kB
Inactive(anon):       32 kB
Active(file):       5704 kB
Inactive(file):    14980 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         17944 kB
Mapped:             8116 kB
Shmem:                48 kB
Slab:               5332 kB
SReclaimable:       2120 kB
SUnreclaim:         3212 kB
KernelStack:        1048 kB
PageTables:          960 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       28560 kB
Committed_AS:     554924 kB
VmallocTotal:     811008 kB
VmallocUsed:        4488 kB
VmallocChunk:     801788 kB

3.

[[email protected] comm]# cat /proc/sys/vm/overcommit_memory
0

該檔案指定了核心針對記憶體分配的策略,其值可以是0、1、2。
0,表示核心將檢查是否有足夠的可用記憶體供應用程序使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,並把錯誤返回給應用程序。
1,表示核心允許分配所有的實體記憶體,而不管當前的記憶體狀態如何。
2,表示核心允許分配超過所有實體記憶體和交換空間總和的記憶體(參照overcommit_ratio)。

結論:

可能是被fork的程序的虛擬地址空間佔用太多,同時你的overcommit引數設定為0,當虛擬地址空間佔用超過一定量(實體記憶體和swap計算)後,就會失敗.

優化一下程式的記憶體使用量或者overcommit_memory設定為其他值

相關推薦

system() 函式執行遇到 Cannot allocate memory

 int iRet=system("ls -l"); if (0 != iRet) { PRERR("system(\"ls -l\") %s",strerror(errno)); }執行結果: ERR: system("ls -l") Cannot all

spark-submit 執行出現“Cannot allocate memory”錯誤

There is issufficient memory for the Java Runtime Environment to continue.  Native memory allocation(malloc) failed to allocate xxx bytes

mxnet-model-server 執行出現 libjemalloc.so.2: cannot allocate memory in static TLS block

原因好像是jemalloc5.0與xxx不相容的bug,有人建議把jemalloc5.0降級到4.4.0,步驟如下:conda install -c conda-forge jemalloc==4.4.0還有人建議修改configure.ac,再編譯jemalloc原始碼,帖

執行Runtime.exec異常: error=12,Cannot allocate memory

Exception Trace: In the Linux circumstance, when the program executes till this place:Process p = Runtime.getRuntime().exec(cmdArr);it thr

centos Cannot allocate memory for the buffer pool

compress instr suse ocean crc ret imp 參數設置 git mysql 無法啟動 ,查看日誌: 17-10-01T15:37:27.401599Z 0 [Warning] TIMESTAMP with implicit DEFAULT v

composer proc_open(): fork failed – Cannot allocate memory

int ann open() for clas wap proc count -m 一般小的VPS 才1G內存,如果使用composer會提示內存不足的現象 解決辦法,可以使用交換內存 直接命令 /bin/dd if=/dev/zero of=/var/swap.1 bs=

解決Zend OPcache huge_code_pages: mmap(HUGETLB) failed: Cannot allocate memory報錯

lan share size led 功能 false opcache not als 前幾日看到鳥哥介紹的 《讓你的PHP7更快之Hugepage》, 於是想試試手給服務器加上,參照格式安裝好擴展,調整好配置文件,然後重啟php-fpm,結果啟動一直報Zend OPcac

pid max導致fork: Cannot allocate memory 的處理

ima oss 系統 bbf 海外 遊戲 控制臺 處理 not 海外一臺服務器淩晨就開始出現了不能登錄遊戲。早上運營人員告知上服務器查看了下。 一打命令就界面提示 -bash: fork: Cannot allocate memory 輸入了幾次top 出來了才出來了,一看

Cannot allocate memory /Resource temporarily unavailable 故障分析

前言: Linux 核心有個機制叫OOM killer(Out-Of-Memory killer),該機制會監控那些佔用記憶體過大,尤其是瞬間很快消耗大量記憶體的程序,為了防止記憶體耗盡而核心會把該程序殺掉。典型的情況是:某天一臺機器突然ssh遠端登入不了,但能ping通,說明不是網路的故障

nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 1073741824) failed (12: Cannot allocate memory)問題

今天進行Nginx反向代理,用nginx -t測試配置檔案是否正常時出現如下錯誤: nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 1073741824) failed (12: Cannot allocate memory) 記憶體對映無法完成,共享記憶體

cassandra os::commit_memory(0x00000000cc800000, 864026624, 0) failed; error='Cannot allocate memory'

本章是關於 cassandra 資料庫執行相關錯誤解決 1、錯誤: 日誌: [[email protected] conf]# tail -f /var/log/cassandra/cassandra.log OpenJDK 64-Bit Server VM warning:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000fa980000, 59244544, 0) failed; error='Cannot allocate memory' (er

啟動專案報錯 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000fa980000, 59244544, 0) failed; error='Cannot allocate memory' (errno=1

-bash: fork: Cannot allocate memory

今天遇到伺服器無法SSH,VNC操作命令提示fork:cannot allocate memory free檢視記憶體還有(注意,命令可能要多敲幾次才會出來)   檢視最大程序數 sysctl kernel.pid_max   ps -eLf | wc -l檢視程

kafka 容器報記憶體不足異常(failed; error='Cannot allocate memory' (errno=12))

原路徑https://blog.csdn.net/womenrendeme/article/details/76855490 異常: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1

啟動服務失敗,Java HotSpot(TM) 64-Bit Server VM warning: error='Cannot allocate memory' (errno=12)

反覆啟動(down了又起,沒起成功down了又起,反覆操作了三遍)應用服務(有多個netty服務端)的時候報這個錯誤: RealServer Start OK 2018-10-30 15:46:52 INFO:2018-10-30 15:46:52 Server beg

-bash: fork: Cannot allocate memory 問題的處理

今天遇到伺服器無法SSH,VNC操作命令提示fork:cannot allocate memory free檢視記憶體還有(注意,命令可能要多敲幾次才會出來) 檢視最大程序數 sysctl kernel.pid_max ps -eLf |

nginx 軟重啟報錯 mmap(MAP_ANON|MAP_SHARED, 524288000) failed (12: Cannot allocate memory)

解決辦法 將配置檔案的 http 的 proxy_cache_path 由500改為300 proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one: 300m inacti

Redis報錯Can't save in background: fork: Cannot allocate memory及類似問題的處理方法

 問題的發現及解決過程: 1.Redis主從複製(一主一從)環境在客戶端用命令檢視主從狀態 在slave上輸入命令顯示如下: 在master上輸入命令顯示如下: 從顯示可以看出主從關係出現問題,然後檢視slave的redis.log有如下報錯: 以為是IP及埠問題,經檢查後發現

-bash: fork: Cannot allocate memory問題,程序數滿了的解決辦法

  今天一大早來到公司就發現一臺遠端伺服器的程序滿了,無法連線上遠端伺服器,如下圖所示:      出現這種情況,主要是因為程序跑滿了,memory被消耗光了,無法為其他的操作,包括vnc操作命令和SSH連線分配記憶體,我們可以用兩個辦法:   1、init 6(重啟伺服器,注意,不是重啟tomcat)

滴滴雲伺服器安裝php的時候報錯virtual memory exhausted: Cannot allocate memory make: *** [ext/fileinfo/libmagic/ap

滴滴雲伺服器安裝php的時候,在make的時候報錯 virtual memory exhausted: Cannot allocate memory make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1 網上搜索的