マシン上のユーザーごとのプロセス数を/etc/security/limits.conf
、nproc値で制限したい。
Linuxはプロセスとスレッドを区別しないことをここで読みましたか?
ユーザーごとの現在のnproc制限は1024ですが、これにスレッドも含まれる場合、私の観点では低すぎます。のマンページではlimits.conf
、nprocの「プロセス」についてのみ言及しており、他には何も言及していません。
// Boostを使用してC ++でサンプルコードを編集// g ++ -o boost_thread boost_thread.cpp -lboost_thread
#include <unistd.h>
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
int counter;
void print_thread(int i) {
counter++;
cout << "thread(" << i << ") counter " << counter << "\n";
sleep(5);
counter--;
}
int main() {
int i = 0;
int max = 1000000;
while (i < max) {
boost::thread(print_thread, i);
i++;
}
return 0;
}
テスト(一部の行を削除):
$ ulimit -u
1024
$ ./thread
...
...
...
thread(828) counter 828
thread(829) counter 829
thread(830) counter 830
thread(831) counter 831
thread(832) counter 832
thread(610) counter thread(833833) counter 834
thread(834) counter 835
thread(835) counter 836
thread(836) counter 837
thread(837) counter 838
thread(838) counter 839
thread(839) counter 840
thread(840) counter 841
thread(841) counter 842
thread(842) counter 843
thread(843) counter 844
thread(844) counter 845
thread(845) counter 846
thread(846) counter 847
thread(847) counter 848
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::thread_resource_error> >'
what(): boost::thread_resource_error
Aborted (core dumped)
私のラップトップはアイドル状態の間に〜130プロセスを使用します。したがって、nproc、またはより広い視野でのLinuxは、プロセスとスレッドを区別しません。スレッドもプロセスだけでなく使い果たされる可能性があるため、これは私には理にかなっているようです。