Bagaimana saya memeriksa ulimit untuk pengguna lain dan mengubah file yang terbuka?

18

Saya memiliki proses yang berjalan sebagai pengguna gearman dan saya ingin mengubah open filesuntuk menghindari kesalahan buruk ini:

GALAT 2014-09-12 17: 49: 14.000000 [utama] terima (Terlalu banyak file terbuka) -> libgearman-server / gearmand.cc: 788

Bagaimana saya bisa menjalankan ulimit sebagai pengguna lain di Ubuntu dan mengubah file yang terbuka? Saat ini saya tidak masuk sebagai tukang gigi tetapi saya memiliki akses root. Saya mencoba melakukan ini:

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

seperti yang direkomendasikan di sini tetapi tidak ada yang mendapatkan keluaran:

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

Jawaban:

25

Meninjau kembali ini hanya karena saya sengaja menemukannya selama pencarian Google dan menemukan komentar Tony berguna: sementara memang benar bahwa batas ditempatkan pada tingkat proses, cara Anda menentukan batas yang berlaku untuk pengguna tertentu adalah dengan temukan proses yang telah mereka mulai dan kemudian periksa proc/${id}/limits.

Secara khusus:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID
phette23
sumber
2
Ini harus menjadi jawaban yang diterima, menggunakannya untuk mengetahui ulimit saat ini untuk pengguna redis di Debian.
tholu
6

Ketika Anda menjalankan ulimitperintah itu hanya mempengaruhi proses yang sedang berjalan ulimit(shell) dan semua subproses. Jadi ketika Anda menjalankan bash --command "ulimit -n", itu hanya mempengaruhi jumlah file yang terbuka untuk instance dari bash, kemudian bash keluar, sehingga proses di masa depan tidak terpengaruh.

Jadi untuk mencapai apa yang Anda inginkan (untuk meningkatkan batas file terbuka untuk proses nyata Anda), mungkin lebih masuk akal untuk mengedit limits.confuntuk meningkatkan batas file terbuka untuk pengguna perkakas khusus Anda.

Lihat contoh limit.conf di tempat lain atau di sini .

BIOSCMOS
sumber
Itu juga yang saya temukan tetapi saya ingin dapat memeriksa apakah itu "berlaku". Saya tidak mendapatkan masalah yang saya alami lagi jadi saya yakin itu terjadi
Tony
10
Ini adalah bagaimana Anda memeriksa more /proc/<proc_id>/limits ... mungkin layak ditambahkan untuk menjawab
Tony
5
Layak disebut lokasi limits.conf juga:/etc/security/limits.conf
UpTheCreek
1

Coba gunakan su - <USERNAME> -c ulimit' -Hn'. Saya baru saja mengujinya pada CEntOS 7, dan berfungsi.

Christian Jürgens
sumber
1
Ini tidak akan berfungsi jika <USERNAME>tidak dapat masuk (memiliki shell nologin).
dr01