linuxプロセス数とハンドル数

9358 ワード

注意:linuxバージョンCentOS 7
目次
一、プロセスとハンドルの概念
二、Linux資源制限
1.ユーザーリソースの制限
2.サービスリソースの制限
3.システム資源制限
三、プロセス数制限
1.ユーザープロセス数の制限
2.サービスプロセス数制限
3.システム総プロセス数
四、ハンドル数制限
1.ユーザハンドル数制限
2.サービスハンドル数制限
3.システム総ハンドル数

一、プロセスとハンドルの概念


1つのプログラムが複数のエンティティ、すなわちプロセスを開く可能性があります.
1つのプロセスでは、ファイルfile、通信接続socket、傍受中のポートなど、実行中に多くのリソースが開きます.これらを総称してハンドル(handle)と呼びます.Linuxでは何でもファイルなので、1つのプロセスで開いているハンドルの数がシステムの制限を超えると、too many open filesという警告が表示されます.
 

二、Linux資源制限


1.ユーザーリソースの制限


Bashにはulimitコマンドがあり、ShellとそのShellが起動したプロセスの使用可能なリソース制御を提供します.主に、オープンファイル記述子の数、ユーザーの最大プロセス数、coredumpファイルのサイズなどが含まれます.
リソース制限の構成は/etc/security/limits.confまたは/etc/security/limits.d/の下のサブプロファイルで構成する、システムはlimitsを先にロードする.confはその後、limitsを英語のアルファベット順にロードする.dディレクトリの下のプロファイルをロードし、構成が上書きされる前の構成をロードします.構成フォーマットは次のとおりです.
ソフトウェアはwarning値、hardは最大値、*はすべてのユーザーに一致することを表します
*     soft   nofile    65535
*     hard   nofile    65535
*     soft   nproc     10000
*     hard   nproc     10000
*     soft   core      20000
*     hard   core      20000

現在のshellにログインするユーザーリソースの制限を表示
 
[root@localdomain ~]# 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) 7424
max locked memory       (kbytes, -l) 64  
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 1024             
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024              (    ) 
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2.サービスリソースの制限


shellについては、mysql、nginxなどのPAM認証でログインしていないユーザーには、上記の構成は有効ではありません.
CentOS 7/RHEL 7のシステムでは、前のSysVの代わりにSystemdを用いるため、/etc/security/limits.confファイルの構成役割ドメインが縮小されましたlimits.confここでの構成は,PAM認証によるログインユーザのリソース制限にのみ適用され,systemdのサービスに対するリソース制限は有効ではない.
 
ファイル/etc/systemd/system.confおよび/etc/systemd/user.conf構成は、同様に、2つの対応するディレクトリのすべてをロードする.confファイル/etc/systemd/system.conf.d/*.confおよび/etc/systemd/user.conf.d/*.conf.
そのうち、system.confはシステムインスタンスで使用されます.user.confユーザーインスタンスで使用されます.一般的なサービスはsystemを用いる.confの構成でいいです.system.conf.d/*.confの構成はsystemを上書きする.conf.
構成フォーマットは次のとおりです.
=左側がリソースタイプ、右側がサイズ
 
vi /etc/systemd/system.conf 
......................
[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes
#CrashShell=no
#ShowStatus=yes
#CrashChVT=1
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=1 2
......................

サービスのリソース制限の表示
cat/proc/YOUR-PID/limits
nginxサービスの構成効果を表示するには、次の手順に従います.
 
$ cat /proc/$(cat /run/nginx.pid)/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        unlimited            unlimited            bytes
  Max resident set          unlimited            unlimited            bytes
  Max processes             100000               100000               processes
 Max open files            100000               100000               files
 Max locked memory         65536                65536                bytes
 Max address space         unlimited            unlimited            bytes
 Max file locks            unlimited            unlimited            locks
 Max pending signals       1030606              1030606              signals
 Max msgqueue size         819200               819200               bytes
 Max nice priority         0                    0
 Max realtime priority     0                    0
 Max realtime timeout      unlimited            unlimited            us

3.システム資源制限


前にuserとserviceに対してリソースを行いましたが、システム全体のリソース数はいくらですか?これはカーネルパラメータに関連しており、カーネルパラメータが多く、プロセス数、ハンドル数など、よく使われるものをどのように修正するかを知る必要があります.
 
 
 

三、プロセス数制限


1.ユーザープロセス数の制限


/etc/security/limits.d/下には、デフォルトでサブプロファイル20-nprocが存在する.conf、ユーザーあたりの最大プロセス数を設定する
/etc/security/limitsを表示します.d/20-nproc.confでは、デフォルトrootユーザーに制限はなく、通常のユーザープロセス数は最大4096であることがわかります.
実際にroottと一般ユーザーのデフォルトは#cat/proc/sys/kernel/threads-maxの値/2、すなわちシステムスレッド数の半分です
 
[root@localhost ~]# cat /etc/security/limits.d/20-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited

ユーザーあたりの最大プロセス数の設定
 
vim  /etc/security/limits.d/20-nproc.conf 
$ cat /etc/security/limits.d/90-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
#      ,            4096(hard),warning  2048(soft);ulimit    soft  
* soft nproc 2048
* hard nproc 4096
    root         65535
root soft nproc 65535
root hard nproc 65535

注:プロファイルを変更しても、現在ログインしているユーザーのプロセス数の制限は変更されません.
 

2.サービスプロセス数制限

[root@zandon ~]# vi /etc/systemd/system.conf 
#      
DefaultLimitNPROC=65535
#     
systemctl daemon-reload
#               ,     ;
systemctl restart nginx.service

注意:プロファイルを変更すると、現在起動しているサービスのプロセス数の制限は変更されません.再起動する必要があります.
 

3.システム総プロセス数


ユーザごとに開くことができる最大プロセス数を設定したが、kernel.pid_maxと仮定するシステム全体のプロセス数(kernel.pid_max)を制御することはできない.pid_max=1000、ユーザーのmax user processes、値はどんなに大きく設定しても、最大開くことができるプロセス数は1000です.
グローバルpid_の表示maxメソッド:
方法1:
 
cat /proc/sys/kernel/pid_max

方法2:
 
# sysctl kernel.pid_max
kernel.pid_max = 32768

この値メソッドを一時的に変更します.
 
echo 65535 > /proc/sys/kernel/pid_max

以上の操作が完了すると、max user processesの値が正しく変更されます.
上は一時的に発効するだけで、機械を再起動すると失効し、永久的に発効する方法です.
/etc/sysctl.confにkernelを追加します.pid_max = 65535
 
# vim /etc/sysctl.conf
kernel.pid_max = 65535

または、
 
echo "kernel.pid_max = 65535" >> /etc/sysctl.conf

そして機械を再起動します.
 

四、ハンドル数制限


1.ユーザハンドル数制限


ログインユーザーの制限は、上記と同様に/etc/security/limits.confまたは/etc/security/limits.d/の下のサブプロファイルは、以下のように構成されます.
 
vi /etc/security/limits.conf
# /etc/security/limits.conf
#        PAM     ,            
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
........................................................
#                 
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

#              65535(  1024)
#soft warning  ,hard     
* soft nofile 65535 
* hard nofile 65535

# End of file

注:プロファイルを変更しても、現在ログインしているユーザーのハンドル数の制限は変更されません.
 

2.サービスハンドル数制限


 
#  service     
sed -i "s/#DefaultLimitNOFILE=/DefaultLimitNOFILE=655350/g"  /etc/systemd/system.conf
#     
sudo systemctl daemon-reload
#               ,     ;
sudo systemctl restart nginx.service

注:プロファイルを変更しても、現在起動しているサービスのハンドル数の制限は変更されません.

3.システム総ハンドル数


各ユーザーが開くことができるプロセスの数、各プロセスが開くことができるハンドルの数が設定されています.もう1つのファイルには、システムのすべてのプロセスで開くことができるハンドルの合計数が設定されています.つまり、このパラメータはシステムレベルです.
システム全体のハンドル数の最大値を変更するには、次のようにします(構成後に有効になります).
 
echo  6553560 > /proc/sys/fs/file-max

 
システムで現在使用されているハンドルの合計数を表示します.
[root@bogon security]# cat /proc/sys/fs/file-nr
1408    0       95852    //1408    ,95852