2012-02-20 39 views
54

Giới hạn tối đa đối với số lượng quy trình có thể có trong hệ thống Linux là gì? Làm thế nào chúng ta có thể tìm thấy nó?Số lượng tối đa các quy trình trong linux

+0

Stack Overflow là trang web dành cho các câu hỏi lập trình và phát triển. Câu hỏi này dường như không có chủ đề vì nó không phải là về lập trình hay phát triển. Xem [Tôi có thể hỏi những chủ đề gì ở đây] (http://stackoverflow.com/help/on-topic) trong Trung tâm trợ giúp. Có lẽ [Super User] (http://superuser.com/) hoặc [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sẽ là một nơi tốt hơn để hỏi. – jww

Trả lời

45

kernel của bạn nên xuất thông tin này trong procfs:

cat /proc/sys/kernel/pid_max 

Đây là số lượng tối đa định quá trình duy nhất hệ thống của bạn có thể hỗ trợ.

Vì đây là tệp, /proc/sys/kernel/pid_max có thể được kiểm tra từ bất kỳ ngôn ngữ lập trình có khả năng nào.

+2

điều này có thể đúng, nhưng trong hầu hết các bản phân phối tốt, điều này bị giới hạn bởi /etc/security/limits.conf có thể lọc số lượng tối đa các quy trình trên cơ sở người dùng/nhóm/tên miền. – AoeAoe

+1

'ulimit' có thể giới hạn các quy trình tối đa cho mỗi người dùng nhỏ hơn pid tối đa và từ một chút Googling, cũng có những hạn chế khác trong trò chơi (nhưng tôi không thể tìm thấy bất kỳ nguồn dứt khoát nào để xác nhận, chẳng hạn như LKML hoặc một Dev nổi tiếng đăng nó). – Kitsune

+1

'int fd = đọc ("/proc/sys/kernel/pid_max ");' không hợp lệ, cũng không hợp lệ đối với bất kỳ tệp nào khác. – immibis

20

sysctl kernel.pid_max

hoặc

cat/proc/sys/kernel/pid_max

Theo đề nghị của Ninefingers.

Để hoàn chỉnh, bạn có thể thay đổi nó tạm thời bằng văn bản cho/proc/syskernel/pid_max hoặc vĩnh viễn bằng cách thêm:

kernel.pid_max = 4194303

để /etc/sysctl.conf . 4194303 là giới hạn tối đa cho x86_64 và 32767 đối với x86.

+3

vừa thử 'sysctl kernel.pid_max = 4194304' và nó đã thành công (Linux 3.10.25) –

+0

@ zed_0xff miễn là bạn nhận thức được rằng sự thay đổi không phải là liên tục, tất cả đều tốt! –

+0

'printf '% x \ n' 4194303' cho' 3fffff' – Tino

16

Câu trả lời ngắn cho câu hỏi của bạn: Số lượng quá trình có thể có trong hệ thống linux là UNLIMITED.

Nhưng có giới hạn về số lượng quy trình cho mỗi người dùng (trừ gốc không có giới hạn).

Và bạn có thể kiểm tra giới hạn người dùng của mình bằng lệnh bên dưới (tùy thuộc vào "quy trình người dùng tối đa").

$ ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 256447 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 128000 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 10240 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 500000 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

Nếu bạn muốn tăng giới hạn về số lượng quá trình cho một người dùng cụ thể (cho ví dụ: hadoop), bạn cần phải thực hiện bên dưới mục trong /etc/security/limits.conf

hadoop - nproc 500000 
+0

Đôi khi thay đổi ở trên yêu cầu khởi động lại để thay đổi có hiệu lực. –

+1

Điều này dẫn đến một trích dẫn cho số là 'không giới hạn', đối với ulimit có nghĩa là nó không có giới hạn (không giới hạn), nhưng số lượng các tiến trình được cho phép không giới hạn ... như trong vô hạn. Các ulimit không phải là câu hỏi. – hpavc

+0

hạt nhân có giới hạn cứng 4mln Tôi nghĩ rằng –

5

kernel.pid_max là một yếu tố hạn chế, nhưng ít nhất cũng quan trọng là kernel.threads-max. Cần lưu ý rằng nimc ulimit mặc định cho mỗi người dùng là kernel.threads-max chia cho hai, và mỗi chuỗi được tính vào giới hạn nproc của người dùng. Do đó, "ps -u $ USER" có thể làm cho nó xuất hiện khi người dùng không cạn kiệt giới hạn nproc của họ, nhưng "ps -L -u $ USER" có thể kể một câu chuyện rất khác.

Các vấn đề liên quan