Tôi muốn giới hạn số lượng quy trình trên mỗi người dùng trên máy của mình /etc/security/limits.conf
và với giá trị nproc.
Tôi đã đọc ở đây rằng Linux không phân biệt giữa các tiến trình và luồng?
Giới hạn nproc hiện tại của tôi cho mỗi người dùng là 1024, nhưng nếu điều này bao gồm cả các luồng, thì theo quan điểm của tôi là quá thấp. Trang con người limits.conf
chỉ đề cập đến "quy trình" cho nproc và không có gì khác.
// chỉnh sửa // mã mẫu trong C ++ với 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;
}
kiểm tra (loại bỏ một số dòng):
$ 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)
Máy tính xách tay của tôi sử dụng ~ 130 quy trình trong khi không sử dụng. Vì vậy, nproc hoặc Linux trong một cái nhìn rộng hơn, không phân biệt giữa các quy trình và luồng. Điều này có vẻ hợp lý với tôi, bởi vì các chủ đề cũng có thể cạn kiệt, không chỉ các quá trình.