2016-11-21 23 views
1

大量のプロセスを生成したい。だから私はmasterという処理をしています。大量のプロセスを生成する

int master(int argc, char* argv[]){ 
    for (int i = 0; i < 50000; ++i) { 
     std::string name = std::to_string(i); 
     MSG_process_create(name.c_str(), slave, NULL, MSG_host_self()); 
    } 
    return 0; 
    } 

int slave(int argc, char* argv[]){ 
    XBT_INFO("%s", MSG_process_get_name(MSG_process_self())); 
    return 0; 
} 

私は次の出力を持って、このプログラムを起動した後:

.... 
.... 
[Master:32734:(32736) 0.000000] [master/INFO] 32734 
[Master:32735:(32737) 0.000000] [master/INFO] 32735 
[0.000000] /home/ken/Downloads/simgrid-master/src/simix/smx_context.cpp:187: [xbt/CRITICAL] Failed to protect stack: Cannot allocate memory 

Process finished with exit code 134 (interrupted by signal 6: SIGABRT) 
その後

デフォルトでは、前のプログラムが必要なので、私は、スタックサイズを変更するにはcontexts/stack-sizeパラメータを使用することをお勧めしました* 8192 50000 KiBの。

私は、このパラメータ--cfg=contexts/stack-size:10を追加しましたが、私は同じ出力があります。

... 
... 
[Master:32735:(32737) 0.000000] [master/INFO] 32735 
[0.000000] /home/ken/Downloads/simgrid-master/src/simix/smx_context.cpp:187: [xbt/CRITICAL] Failed to protect stack: Cannot allocate memory 

Process finished with exit code 134 (interrupted by signal 6: SIGABRT) 

かを:

... 
... 
[Master:32734:(32736) 0.000000] [master/INFO] 32734 
[0.000000] /home/ken/Downloads/simgrid-master/src/simix/smx_context.cpp:187: [xbt/CRITICAL] Failed to protect stack: Cannot allocate memory 

「私のプログラムは、このパラメータを見ていないように見えるかもしれないが、それはにISNスタックパラメータが5の場合は、私に与えます:

Finally, if nothing of the above applies, this can result from a stack overflow. 
Try to increase stack size with --cfg=contexts/stack_size (current size is 1 KiB). 

どうしたの?

答えて

2

システム上でプロセスごとに許可される最大マッピング数の値を増やすことができますか?

あなたは私たちは、これはいくつかのSMPIの実行にいくつかの問題を引き起こしていたことが最近見た500000

に最大値を設定するにsudo sysctlの-w vm.max_map_count = 500000であることを行うことができますが、多分それはあなたの側で同じです。 ENOMEMエラーコードはさまざまな理由で設定されており(http://man7.org/linux/man-pages/man2/mprotect.2.htmlによれば、その1つがマッピング数である可能性があるため)、「メモリを割り当てることができません」というメッセージは誤解を招く可能性があります。

関連する問題