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という警告が表示されます.
Bashにはulimitコマンドがあり、ShellとそのShellが起動したプロセスの使用可能なリソース制御を提供します.主に、オープンファイル記述子の数、ユーザーの最大プロセス数、coredumpファイルのサイズなどが含まれます.
リソース制限の構成は/etc/security/limits.confまたは/etc/security/limits.d/の下のサブプロファイルで構成する、システムはlimitsを先にロードする.confはその後、limitsを英語のアルファベット順にロードする.dディレクトリの下のプロファイルをロードし、構成が上書きされる前の構成をロードします.構成フォーマットは次のとおりです.
ソフトウェアはwarning値、hardは最大値、*はすべてのユーザーに一致することを表します
現在のshellにログインするユーザーリソースの制限を表示
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.
構成フォーマットは次のとおりです.
=左側がリソースタイプ、右側がサイズ
サービスのリソース制限の表示
cat/proc/YOUR-PID/limits
nginxサービスの構成効果を表示するには、次の手順に従います.
前にuserとserviceに対してリソースを行いましたが、システム全体のリソース数はいくらですか?これはカーネルパラメータに関連しており、カーネルパラメータが多く、プロセス数、ハンドル数など、よく使われるものをどのように修正するかを知る必要があります.
/etc/security/limits.d/下には、デフォルトでサブプロファイル20-nprocが存在する.conf、ユーザーあたりの最大プロセス数を設定する
/etc/security/limitsを表示します.d/20-nproc.confでは、デフォルトrootユーザーに制限はなく、通常のユーザープロセス数は最大4096であることがわかります.
実際にroottと一般ユーザーのデフォルトは#cat/proc/sys/kernel/threads-maxの値/2、すなわちシステムスレッド数の半分です
ユーザーあたりの最大プロセス数の設定
注:プロファイルを変更しても、現在ログインしているユーザーのプロセス数の制限は変更されません.
注意:プロファイルを変更すると、現在起動しているサービスのプロセス数の制限は変更されません.再起動する必要があります.
ユーザごとに開くことができる最大プロセス数を設定したが、kernel.pid_maxと仮定するシステム全体のプロセス数(kernel.pid_max)を制御することはできない.pid_max=1000、ユーザーのmax user processes、値はどんなに大きく設定しても、最大開くことができるプロセス数は1000です.
グローバルpid_の表示maxメソッド:
方法1:
方法2:
この値メソッドを一時的に変更します.
以上の操作が完了すると、max user processesの値が正しく変更されます.
上は一時的に発効するだけで、機械を再起動すると失効し、永久的に発効する方法です.
/etc/sysctl.confにkernelを追加します.pid_max = 65535
または、
そして機械を再起動します.
ログインユーザーの制限は、上記と同様に/etc/security/limits.confまたは/etc/security/limits.d/の下のサブプロファイルは、以下のように構成されます.
注:プロファイルを変更しても、現在ログインしているユーザーのハンドル数の制限は変更されません.
注:プロファイルを変更しても、現在起動しているサービスのハンドル数の制限は変更されません.
各ユーザーが開くことができるプロセスの数、各プロセスが開くことができるハンドルの数が設定されています.もう1つのファイルには、システムのすべてのプロセスで開くことができるハンドルの合計数が設定されています.つまり、このパラメータはシステムレベルです.
システム全体のハンドル数の最大値を変更するには、次のようにします(構成後に有効になります).
システムで現在使用されているハンドルの合計数を表示します.
目次
一、プロセスとハンドルの概念
二、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