Câu hỏi Làm thế nào để tăng giới hạn mở tập tin tối đa của Neo4j (ulimit) trong Ubuntu?


Hiện tại ulimit -n trình diễn 10000. Tôi muốn tăng nó lên 40000. Tôi đã chỉnh sửa "/etc/sysctl.conf" và đặt fs.file-max=40000. Tôi cũng đã chỉnh sửa /etc/security/limits.conf và cập nhật các giá trị cứng và mềm. Nhưng vẫn hiển thị ulimit 10000. Sau khi thực hiện tất cả những thay đổi này, tôi khởi động lại máy tính xách tay của mình. Tôi đã truy cập vào mật khẩu gốc.

usr_name@usr_name-lap:/etc$ /sbin/sysctl fs.file-max
fs.file-max = 500000

Đã thêm các dòng sau vào /etc/security/limits.conf - -

*     soft    nofile          40000
*     hard    nofile          40000

Tôi cũng đã thêm dòng sau vào /etc/pam.d/su- -

session    required   pam_limits.so

Tôi đã thử mọi cách có thể như được đưa ra trên các diễn đàn khác, nhưng tôi có thể đạt tới giới hạn tối đa là 10000, không vượt quá điều đó. Điều gì có thể là vấn đề?

Tôi đang thực hiện thay đổi này bởi vì neo4j ném giới hạn tệp mở tối đa đạt lỗi.


76
2018-02-02 19:58


gốc


Bạn đã làm đúng, chỉ cần khởi động lại hệ thống và tất cả sẽ hoạt động: sudo ulimit -n 40000 - 0x90
@ 0x90 Tôi khởi động lại hệ thống. Nhưng ngay cả sau đó nó không được thay đổi. - theharshest
Là đặc trưng của Ubuntu, nó có thể thực sự thuộc về askubuntu.com; một câu hỏi tương tự ở đây: askubuntu.com/questions/162229/… - Lambart
serverfault.com/questions/610130/… - Ciro Santilli 新疆改造中心 六四事件 法轮功
sau khi thêm vào /etc/security/limits.conf, dịch vụ nào sẽ được khởi động lại để thay đổi có hiệu lực? - Ashish Karpe


Các câu trả lời:


Tôi đang sử dụng Debian nhưng giải pháp này sẽ hoạt động tốt với Ubuntu.
Bạn phải thêm một dòng trong neo4j-service kịch bản.
Đây là những gì tôi đã làm:

nano /etc/init.d/neo4j-service
Thêm vào " ulimit –n 40000 »Ngay trước dòng bắt đầu-dừng-daemon bên trong phần do_start

Lưu ý rằng tôi đang sử dụng phiên bản Enterprise 2.0 phiên bản. Hy vọng điều này sẽ giúp bạn.


8
2018-02-03 19:31



FWIW không có kịch bản như vậy trên Ubuntu Server 14.04. Giải pháp của tôi đã được tìm thấy trong câu hỏi này (và câu trả lời của lornix): askubuntu.com/questions/162229/… - Tóm lại, bạn cần chỉnh sửa /etc/security/limits.conf và /etc/pam.d/common-session* - Lambart
Tôi thấy rằng người hỏi ban đầu đã đề cập đến neo4j khi đi qua. Có vẻ như nó thuộc về chủ đề của câu hỏi vì nó không liên quan gì tới Ubuntu. - Lambart
Trong Ubuntu 14.04, thực sự là /etc/init.d/neo4j-service và Martin Larivière đúng, chèn uname -n 40000 giải quyết vấn đề. Tôi không biết sự khác biệt giữa Ubuntu Server và Ubuntu, vì vậy có lẽ bạn cũng đúng, tôi đang thêm điều này chỉ để làm rõ rằng những gì Martin đã viết giải quyết vấn đề với Ubuntu 14.04 đơn giản. - Grégoire C
@ Lambart, trong trường hợp của neo4j-dịch vụ, common-session-* lừa sẽ không hoạt động, bởi vì neo4j-dịch vụ được dựa trên start-stop-daemon và start-stop-daemon không tận dụng PAM chút nào. Giải pháp duy nhất thực sự là thêm một ulimit -n xxx gọi trong init script. - David Ammouial
Đây không phải là một giải pháp, đây là một bandaid. - Tim Wachter


Những gì bạn đang làm sẽ không hoạt động đối với người dùng root. Có lẽ bạn đang chạy dịch vụ của bạn như là người chủ và do đó bạn không nhận được để xem sự thay đổi.

Để tăng ulimit cho người dùng root, bạn nên thay thế * bởi gốc. * không áp dụng cho người dùng root. Phần còn lại là giống như bạn đã làm. Tôi sẽ báo lại nó ở đây.

Thêm các dòng sau vào tệp: /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

Và sau đó thêm dòng sau vào tệp: /etc/pam.d/common-session

session required pam_limits.so

Điều này sẽ cập nhật các ulimit cho người dùng root. Như đã đề cập trong các bình luận, bạn thậm chí không cần phải khởi động lại để xem thay đổi.


82
2018-06-21 08:32



Bạn thực sự không cần khởi động lại để giới hạn mới có hiệu lực. Điểm chỉnh sửa tệp /etc/pam.d/common-session là để việc tạo bất kỳ phiên mới nào sẽ làm cho các tệp giới hạn được xử lý. - Christopher Smith
Quy trình này hoạt động. Không cần khởi động lại. Chỉ cần đăng xuất và đăng nhập lại để xem kết quả. - Bill Butler
nó không làm việc cho tôi cho ubunutu 14.04 - Dejell
Trong trường hợp của dịch vụ neo4j hoặc bất kỳ dịch vụ nào khác sử dụng start-stop-daemon, các common-session-* lừa sẽ không hoạt động, bởi vì start-stop-daemon không tận dụng PAM chút nào. Không có cách nào khác ngoài việc thêm một ulimit -n xxx gọi một nơi nào đó trong init script trước khi dịch vụ được bắt đầu. - David Ammouial
Làm việc tốt đẹp trên Ubuntu 16.04.1 LTS - Andrew T Finnell


1) Kiểm tra sysctl file-max giới hạn:

$ cat /proc/sys/fs/file-max

Nếu giới hạn thấp hơn giá trị mong muốn của bạn, hãy mở sysctl.conf và thêm dòng này vào cuối tệp:

fs.file-max = 65536

Cuối cùng, áp dụng sysctl giới hạn:

$ sysctl -p 

2) Chỉnh sửa /etc/security/limits.conf và thêm vào bên dưới

* soft     nproc          65535    
* hard     nproc          65535   
* soft     nofile         65535   
* hard     nofile         65535

Những giới hạn này sẽ không áp dụng cho root người dùng, nếu bạn muốn thay đổi root giới hạn bạn phải làm điều đó một cách rõ ràng:

root soft     nofile         65535   
root hard     nofile         65535
...

3) Khởi động lại hệ thống hoặc thêm dòng sau vào cuối /etc/pam.d/common-session:

session required pam_limits.so

Đăng xuất và đăng nhập lại.

4) Kiểm tra giới hạn mềm:

$ ulimit -a

và giới hạn cứng:

$ ulimit -Ha
....

open files                      (-n) 65535

Tài liệu tham khảo : http://ithubinfo.blogspot.in/2013/07/how-to-increase-ulimit-open-file-and.html


62
2017-07-17 06:37



Hãy chắc chắn rằng bạn đã đăng xuất và đăng nhập lại để nó có thể phản ánh những thay đổi của bạn, nếu bạn không kiểm tra nó với người dùng root, cho ubuntu bạn có thể làm điều này bằng cách gnome-session-quit - Mayank Saxena
/ proc / sys / fs / file-max KHÔNG PHẢI LÀ MAX Nofile cho phép bởi hệ thống !!! Ví dụ trên hệ thống của tôi theo mặc định nó được đặt thành 1528702. Đặt giá trị đó cho giá trị mềm / cứng trong limits.conf không cho phép người dùng tăng giới hạn từ 1024. Tôi phải đặt limits.conf thành một thứ gì đó bảo thủ hơn, ví dụ: 256 * 1024 = 262144 và cuối cùng là ulimit -a hiển thị giống nhau cho người dùng thông thường. - sabujp


Tôi đã gặp vấn đề tương tự, và làm cho nó hoạt động bằng cách thêm các mục vào /etc/security/limits.d/90-somefile.conf. Lưu ý rằng để xem các giới hạn hoạt động, tôi phải đăng xuất hoàn toàn từ phiên ssh và sau đó đăng nhập lại.

Tôi muốn đặt giới hạn cho một người dùng cụ thể chạy một dịch vụ, nhưng có vẻ như tôi đã nhận được giới hạn được đặt cho người dùng tôi đã đăng nhập bằng. Dưới đây là một ví dụ để hiển thị cách ulimit được đặt dựa trên người dùng được xác thực và không phải là người dùng hiệu quả:

$ sudo cat /etc/security/limits.d/90-nofiles.conf
loginuser    soft    nofile   10240
loginuser    hard    nofile   10240
root         soft    nofile   10241
root         hard    nofile   10241
serviceuser  soft    nofile   10242
serviceuser  hard    nofile   10242

$ whoami
loginuser
$ ulimit -n
10240
$ sudo -i
# ulimit -n
10240    # loginuser's limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser's limit.

Bạn có thể sử dụng * để chỉ định mức tăng cho tất cả người dùng. Nếu tôi khởi động lại dịch vụ với tư cách người dùng tôi đã đăng nhập và thêm ulimit -n với init script, tôi thấy rằng các giới hạn của người dùng đăng nhập ban đầu được đặt ra. Tôi đã không có cơ hội để xác minh giới hạn của người dùng được sử dụng trong khi khởi động hệ thống hoặc xác định giới hạn nofile thực tế của dịch vụ mà tôi đang chạy (được bắt đầu với start-stop-daemon).

Có 2 cách tiếp cận hiện đang hoạt động:

  1. thêm một điều chỉnh ulimit vào init script, ngay trước khi start-stop-daemon.
  2. ký tự đại diện hoặc cài đặt ulimit rộng hơn trong tệp bảo mật.

3
2017-10-03 09:03



khi tôi làm những gì bạn đã làm (bắt đầu từ whoami) Đầu tiên tôi nhận được 1024, sau đó là 65536 (cho thư mục gốc), sau đó là 65536 cho người dùng. Nhưng đầu tiên là cùng một người dùng. Bạn có một lời giải thích cho điều này, tôi đang bối rối - Danielson
Điều đó nghe có vẻ lạ lùng. Làm cách nào để chuyển từ người dùng sang gốc và quay lại người dùng? Bạn đã đăng xuất hoàn toàn sau khi đã đặt tệp chưa? bạn có thể trong phiên được lưu trong bộ nhớ cache ban đầu và sau đó sử dụng phiên mới tùy thuộc vào cách bạn quay lại với người dùng. - Brett
Tôi tiếp tục khởi động lại, chỉ để chắc chắn. Cũng đã thử cài đặt /etc/sysctl.conf -> fs.file-max = 1000000 nên sửa chữa nó trên toàn cầu cho tất cả người dùng, cũng không có kết quả. Nó giống như một quá trình bỏ qua tôi. Tôi chuyển từ người dùng sang gốc thành người dùng, như bạn đã mô tả, từ gốc -> người dùng đang sử dụng su - my_user_name. Điều này cho biết hệ thống biết những gì nó nên sử dụng cho người dùng đó, nhưng nó không ... - Danielson


Bạn có thể thay đổi init script cho neo4j để làm một cái ulimit -n 40000 trước khi chạy neo4j.

Tuy nhiên, tôi không thể không cảm thấy bạn đang sủa cây sai. Làm neo4j hợp pháp cần hơn 10.000 mô tả tập tin mở? Điều này nghe có vẻ giống như một lỗi trong neo4j hoặc cách bạn đang sử dụng nó. Tôi sẽ cố gắng giải quyết điều đó.


2
2018-02-02 23:31



tôi bắt đầu neo4j sử dụng neo4j start. Tôi có thể tìm init script cho nó ở đâu? - theharshest
thử gõ ulimit -n 40000 trước neo4j start - abligh


Tôi gặp rất nhiều khó khăn khi làm việc này.

Sử dụng phần sau cho phép bạn cập nhật nó bất kể quyền của người dùng của bạn.

sudo sysctl -w fs.inotify.max_user_watches=100000

Chỉnh sửa

Chỉ cần nhìn thấy điều này từ người dùng khác cũng trên một trang web stackexchange khác (cả hai đều hoạt động, nhưng phiên bản này vĩnh viễn cập nhật cài đặt hệ thống, thay vì tạm thời):

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; 
sudo sysctl -p

2
2017-07-10 15:41





Hãy thử chạy lệnh này nó sẽ tạo ra một *_limits.conf tệp dưới /etc/security/limits.d

echo "* soft nofile 102400" > /etc/security/limits.d/*_limits.conf && echo "* hard nofile 102400" >> /etc/security/limits.d/*_limits.conf

Chỉ cần thoát khỏi thiết bị đầu cuối và đăng nhập lại và xác minh bằng ulimit -n nó sẽ được đặt cho * người dùng


2
2017-07-29 07:36



Câu trả lời dễ dàng và hữu ích. - sumanth
Cảm ơn @sumanth, Happy để giúp bạn. - Mahattam


tl; dr đặt cả giới hạn mềm và cứng

Tôi chắc chắn nó hoạt động như dự định nhưng tôi sẽ thêm nó ở đây chỉ trong trường hợp. Để hoàn thành, giới hạn được đặt ở đây (xem dưới đây để biết cú pháp): /etc/security/limits.conf

some_user       soft    nofile          60000
some_user       hard    nofile          60000

và được kích hoạt với những điều sau đây trong /etc/pam.d/common-session:

session required pam_limits.so

Nếu bạn chỉ đặt giới hạn cứng, ulimit -a sẽ hiển thị mặc định (1024): Nếu bạn thiết lập chỉ giới hạn mềm ulimit -a sẽ hiển thị (4096)

Nếu bạn đặt cả hai ulimit -a sẽ hiển thị giới hạn mềm (lên đến giới hạn cứng của khóa học)


2
2017-09-12 00:51