Làm cách nào để kiểm tra ulimit cho người dùng khác và thay đổi các tệp đang mở?


18

Tôi có một quy trình đang chạy với tư cách là người sử dụng hộp số và tôi muốn thay đổi open filesđể tránh gặp phải lỗi khó chịu này:

LRI 2014-09-12 17: 49: 14.000000 [chính] chấp nhận (Quá nhiều tệp đang mở) -> libgearman-server / gearmand.cc: 788

Làm cách nào tôi có thể chạy ulimit với tư cách là người dùng khác trên Ubuntu và thay đổi các tệp đang mở? Tôi hiện không đăng nhập như gearman nhưng tôi có quyền truy cập root. Tôi đã thử làm điều này:

su gearman --shell /bin/bash --command "ulimit -n"

như được đề xuất ở đây nhưng không có gì nhận được đầu ra:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$

Câu trả lời:


25

Xem xét lại điều này chỉ vì tôi tình cờ thấy nó trong một tìm kiếm của Google và thấy nhận xét của Tony là hữu ích: trong khi sự thật là các giới hạn được đặt ở cấp độ xử lý, cách bạn sẽ xác định giới hạn cho một người dùng cụ thể sẽ là tìm các quy trình họ đã bắt đầu và sau đó kiểm tra proc/${id}/limits.

Đặc biệt:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID

2
Đây phải là câu trả lời được chấp nhận, sử dụng nó để tìm ra ulimit hiện tại cho người dùng redis trên Debian.
tholu

6

Khi bạn chạy ulimitlệnh, nó chỉ ảnh hưởng đến quá trình đang chạy ulimit(trình bao) và tất cả các quy trình con. Vì vậy, khi bạn chạy bash --command "ulimit -n", nó chỉ ảnh hưởng đến số lượng tệp đang mở cho trường hợp bash đó, sau đó thoát bash, do đó các quy trình trong tương lai không bị ảnh hưởng.

Vì vậy, để thực hiện những gì bạn muốn (để tăng giới hạn tệp mở cho quy trình thực của bạn), có lẽ nên chỉnh sửa limits.confđể tăng giới hạn tệp mở cho người dùng hộp số cụ thể của bạn.

Xem ví dụ về giới hạn. Thông tin ở nơi khác hoặc ở đây .


Đó cũng là những gì tôi tìm thấy nhưng tôi rất muốn có thể kiểm tra xem nó có "hiệu lực hay không". Tôi không gặp phải vấn đề mà tôi gặp phải nữa nên tôi chắc chắn nó đã xảy ra
Tony

10
Đây là cách bạn kiểm tra more /proc/<proc_id>/limits ... có thể đáng để thêm vào để trả lời
Tony

5
Đáng nói đến vị trí của giới hạn. Cũng vậy:/etc/security/limits.conf
UpTheCalet

1

Hãy thử sử dụng su - <USERNAME> -c ulimit' -Hn'. Tôi mới thử nó trên CEntOS 7, và nó hoạt động.


1
Điều này sẽ không hoạt động nếu <USERNAME>không thể đăng nhập (có vỏ nologin).
dr01
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.