2008-08-29 33 views

Trả lời

128

Bạn luôn có thể thử thực hiện ulimit -n 2048. Điều này sẽ chỉ đặt lại giới hạn cho vỏ hiện tại của bạn và số bạn chỉ định không được vượt quá giới hạn cứng

Mỗi hệ điều hành có thiết lập giới hạn cứng khác nhau trong tệp cấu hình. Ví dụ: giới hạn tệp mở cứng trên Solaris có thể được đặt khi khởi động từ/etc/system.

set rlim_fd_max = 166384 
set rlim_fd_cur = 8192 

Trên OS X, cùng một dữ liệu này phải được đặt trong /etc/sysctl.conf.

kern.maxfilesperproc=166384 
kern.maxfiles=8192 

Trong Linux, các cài đặt này thường có trong /etc/security/limits.conf.

Có hai loại giới hạn:

  • mềm giới hạn chỉ đơn giản là các giới hạn hiện thi hành
  • cứng giới hạn đánh dấu giá trị lớn nhất mà không thể vượt qua bằng cách thiết lập một giới hạn mềm

Giới hạn mềm có thể được đặt bởi bất kỳ người dùng nào trong khi giới hạn cứng chỉ có thể thay đổi được bằng gốc. Giới hạn là tài sản của quy trình. Chúng được kế thừa khi một tiến trình con được tạo nên các giới hạn trên toàn hệ thống sẽ được thiết lập trong khi khởi tạo hệ thống trong các kịch bản lệnh init và các giới hạn người dùng sẽ được đặt trong khi đăng nhập người dùng ví dụ bằng cách sử dụng pam_limits.

Thường có các giá trị mặc định được đặt khi máy khởi động. Vì vậy, mặc dù bạn có thể đặt lại ulimit của bạn trong một vỏ cá nhân, bạn có thể thấy rằng nó đặt lại về giá trị trước đó khi khởi động lại. Bạn có thể muốn grep script khởi động của bạn cho các lệnh ulimit tồn tại nếu bạn muốn thay đổi mặc định.

+4

bạn có thể cho tôi biết cách sử dụng tính năng này trong cửa sổ không? – Pritam

+1

Điều này đã giúp tôi, cảm ơn –

+1

cho RedHat, tệp được đặt tại /etc/security/limits.conf – Tomofumi

82

Nếu bạn đang sử dụng Linux và bạn gặp lỗi về quyền, bạn cần tăng giới hạn cho phép trong tệp /etc/limits.conf hoặc /etc/security/limits.conf (nơi tệp được đặt phụ thuộc vào bản phân phối Linux cụ thể của bạn).

Ví dụ để cho phép bất kỳ ai trên máy tăng số lượng tệp mở của họ lên tới 10000, hãy thêm dòng vào tệp limits.conf.

* hard nofile 10000

Sau đó, đăng xuất và đăng nhập lại vào hệ thống của bạn và bạn sẽ có thể làm:

ulimit -n 10000

mà không một lỗi cho phép.

+4

LƯU Ý: Ký tự đại diện ** không ** áp dụng cho người dùng 'root'. Bạn phải chỉ rõ 'root hard nofile 10000' nếu bạn muốn điều chỉnh giới hạn' root'. –

+1

@JoshPinter Haha, tôi đã dành 3 giờ qua để xem qua từng hướng dẫn về cách thay đổi 'ulimit' và cuối cùng phát hiện ra tôi đã đăng nhập bằng root. Đó là lý do tại sao tôi tiếp tục nhìn thấy 1024 trong 'ulimit -a'. Tôi thay đổi wildcare, và thêm một '*' bên trong 'limits.conf'. Tất cả là tốt bây giờ, (im sử dụng phím ssh không lo lắng: P) - Cảm ơn bạn !!! –

+1

@NiCkNewman Tôi rất vui vì bạn đang cười về điều đó! Đó là một đặc điểm tốt trong một lập trình viên/người sysops. Tôi đã làm điều tương tự và không quá vui vẻ. Vui mừng nó đã giúp! :) –

32

1) Thêm dòng sau vào /etc/security/limits.conf

webuser hard nofile 64000 

sau đó đăng nhập như webuser

su - webuser 

2) Chỉnh sửa sau hai tập tin cho webuser

thêm .bashrc và .bash_profile tệp bằng cách chạy

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile 

3) Đăng xuất, sau đó đăng nhập lại và xác minh rằng những thay đổi đã được thực hiện một cách chính xác:

$ ulimit -a | grep open 
open files      (-n) 64000 

Thats nó và họ bùng nổ, boom boom.

+7

Nếu bạn thay đổi dòng của bạn trong limits.conf từ 'cứng' thành 'mềm', nó sẽ trở thành mặc định mới và không yêu cầu thay đổi đối với các cấu hình bash. – RishiD

+0

Dường như bạn đang lặp lại một bước phụ. Chỉ đặt giới hạn sẽ làm giống như cấu hình, nhưng trên tất cả các phiên. – Eddie

5

Nếu một số dịch vụ của bạn đang balking vào ulimits, đôi khi nó dễ dàng hơn để đặt lệnh thích hợp vào init-script của dịch vụ. Ví dụ, khi Apache được báo cáo

[cảnh báo] (11) Resource tạm thời không có: apr_thread_create: không thể tạo chủ đề công nhân

Cố gắng đưa ulimit -s unlimited vào /etc/init.d/httpd. Điều này không yêu cầu khởi động lại máy chủ.

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