Çalışan bir işlemde maksimum dosya sınırını ayarla


27

Sonunda maksimum açık dosya sınırına ulaşacak uzun süren bir işlemim var. Başarısız olduktan sonra bunu nasıl değiştireceğimi biliyorum, ancak çalışan işlem için bunu komut satırından değiştirmenin bir yolu var mı?

Yanıtlar:


28

CentOS / RHEL'deki daha yeni çekirdeklerde (2.6.32+) bunu çalışma zamanında / proc / <pid> / limitleri ile değiştirebilirsiniz:

cd /proc/7671/
[root@host 7671]# cat limits  | grep nice
Max nice priority         0                    0                    
[root@host 7671]# echo -n "Max nice priority=5:6" > limits
[root@host 7671]# cat limits  | grep nice
Max nice priority         5                    6                    

Bu kural! Limitler dosyasına yazabileceğinizi bilmiyordum.
saat

4
ubuntu'da benim için çalışmıyor 12.04
Poma

5
Bu benim 3.2 çekirdeğimde çalışmıyor . Sanırım dağıtımınızın bunun için resmi olmayan bir yaması var çünkü çekirdeğin fs / proc / base.c içinde bu yamanın izini göremiyorum .
Totor

Olabilir ... RHEL / CentOS çekirdeklerinde bulunduğunu biliyorum. Debian çekirdeklerinde mevcut görünmüyor.
Sig-IO,

2
'setprlimit' geleceğe yönelik ve önerilen yoldur, bir sonraki cevaba bakınız
Sig-IO

26

Belgelendiği gibi burada , prlimitutil-linux 2.21 ile tanıtıldı komut, okuyup çalışan süreçlerin sınırlarını değiştirmek için izin verir.

Bu, /proc/<pid>/limitsana hat çekirdeğine dahil olmayan yazılabilir bir takiptir . Bu çözüm işe yaramalı.

prlimit(1)Henüz sahip değilseniz kodu prlimit(2)manimalisteki minimalist versiyonda bulabilirsiniz .


2
Manpage'deki minimalist versiyon için +1!
Totor,

Uyarı: “memcached”, bir limitle karşılaştıktan sonra işlemindeki “nolimit” i değiştirirseniz farklılaşacaktır. Yazılabilir sınırları kullanmak her zaman iyi bir fikir değildir
Yuhanna


2

man ulimit-N seçeneğiyle ulimit'i deneyebilirsiniz , ancak mag sayfası çoğu işletim sisteminin bu ayarı yapmasına izin vermez.

Bir sistem çapında dosya açıklamaları sınırı kullanarak ayarlayabilir sysctl -w fs.file-max=Nve değişikliklerin başlatılmasından sonra da devam etmesini sağlayabilirsiniz./etc/sysctl.conf

Ancak, belirli bir zamanda çok fazla dosyanın açık olması gerekip gerekmediğini görmek için işleme bakmayı da önerebilirim ve aslında bazı dosyaları kapatabilir ve bu süreçte daha verimli olabilirsiniz.


Açık dosya olayı bir hatadır, ancak çözemedim. Bunu yapmak isterken, üretim gün ortasında periyodik olarak çöküyor.
kgigi

ulimitayarları çalışan işlemlere uygulamaz .
Try-catch-nihayet

0

İşlem, eğer programlanmışsa (veya hacklemeyi başarırsanız) kendi yumuşak limitlerini değiştirebilir, ancak CAP_SYS_RESOURCE özelliğine sahip olmadıkça zor sınırlarını yükseltemez. Çalışma zamanında limitleri inceleyebilirsiniz /proc/$pid/limits.

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.