/etc/security/limits.conf yumuşak nproc sınırı yok sayılıyor


18

MongoDB veritabanım yük altında sorunla karşılaşıyordu ve aşağıdaki hatalar günlükleri spam yapıyor:

[initandlisten] pthread_create failed: errno:11 Resource temporarily unavailable
[initandlisten] can't create new thread, closing connection

1024 olan "ulimit -u" veya "Maks süreçler" ayarını yükseltmem gerektiği sonucuna vardım ve web ön uçları göz önüne alındığında kullanım bu değeri aşmış olabilir (bunu nasıl kontrol edeceğinizden emin değilim) .

/Etc/security/limits.conf dosyasını son iki satırı eklemek için düzenledim (ilk ikisi zaten oradaydı):

*                soft    nofile          350000
*                hard    nofile          350000
*                soft    nproc           30000
*                hard    nproc           30000

Sonra sistemi yeniden başlattım (BTW bunu yapmalıydım, yoksa bir mongod hizmeti yeniden başlatılmalı mı?)

Yeniden başlattıktan sonra, mongod işlemi için süreç limitlerini gözden geçirirken, yumuşak limit göz ardı edildi:

$ cat /proc/2207/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             1024                 30000                processes
Max open files            350000               350000               files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       273757               273757               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

$ whoami
mongod


$ 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) 273757
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 350000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

"Max işlemleri" sert ve yumuşak sınırlar /etc/security/limits.conf dosya başına 30000 olacağını, ama sadece zor olanı bekleniyor.

Neyi yanlış yapıyorum?

Amazon Linux'u AWS EC2'de çalıştırıyorum.

bash-4.1$ cat /etc/*-release
Amazon Linux AMI release 2012.09

2
/Etc/security/conf.d/ adresine bakın? Bazen orada ana sınırlarda ayarlananları geçersiz kılan bir dosya vardır. Conf.
dmourati

dmourati, teşekkürler, haklıydın (Scott Mcinyre ile aynı).
John M

Yanıtlar:


22

Ayarlarınızı geçersiz kıldığından /etc/security/limits.d/90-nproc.conf dosyasını kontrol edin. Aynı sorun hakkında geçen yıl yazdım http://scott.cm/max-processes-1024-limits-conf/


Teşekkürler, öyle görünüyor. Ayrıca, "mongod" işlemini yeniden başlatmanın yeni ayarları okumak için yeterli olup olmadığını da söyleyebilir misiniz?
John M

Evet, limiti değiştirdiğinizde yapmanız gereken tek şey mongod işlemini yeniden başlatmaktır ve yeni limitleri okuyacaktır.
Scott Mcintyre

Teşekkürler, bu da işe yaradı, her iki sınır da 30000'de. Yardımınız için çok teşekkürler Scott!
John M

Bir sistem dosyasını düzenlemek yerine, /etc/security/limits.d/ile başlayan 99_local(oluşturduğunuzu göstermek için) bir dosya oluşturmanızı ve orada istediğiniz her şeyi geçersiz kılmanızı öneririm.
Alastair Irvine

1

Mongodb veritabanını başlatan komut dosyasının başlangıcında ulimit değerini değiştirmeyi deneyebilirsiniz.

Bir alt işlem, kaynak sınırlarını çağıran işlemden devralır.


Global değeri değiştirmek istiyorum. 'Nofile' ve 'nproc' üzerindeki sabit sınır için çalıştı, ancak 'nproc' üzerindeki yumuşak sınır için çalışmadı.
John M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.