Quero limitar o número de processos por usuário na minha máquina, com /etc/security/limits.conf
e o valor nproc.
Eu li aqui que o Linux não faz distinção entre processos e threads?
Meu limite de nproc atual por usuário é 1024, mas se isso incluir também threads, é muito baixo no meu ponto de vista. A página de manual limits.conf
menciona apenas "processo" para nproc e nada mais.
// edit // código de exemplo em C ++ com Boost // 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;
}
teste (removeu algumas linhas):
$ 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)
Meu laptop usa ~ 130 processos enquanto está ocioso. Portanto , o nproc , ou Linux em uma visão mais ampla, não distingue entre processos e threads. O que me parece razoável, porque os threads também podem ser cansativos, não apenas processos.