LFCS : Linux 프로세스 리소스 사용량 모니터링 및 사용자 별 프로세스 제한 설정-14 부


2016 년 2 월 2 일부터 시행되는 LFCS 인증 시험 목표의 최근 수정으로 인해 여기에 게시 된 LFCS 시리즈에 필요한 문서를 추가하고 있습니다. 이 시험을 준비하려면 LFCE 시리즈도 함께 진행하는 것이 좋습니다.

모든 Linux 시스템 관리자는 하드웨어, 리소스 및 주요 프로세스의 무결성과 가용성을 확인하는 방법을 알아야합니다. 또한 사용자별로 리소스 제한을 설정하는 것도 해당 기술 세트의 일부 여야합니다.

이 기사에서는 예상치 못한 생산 중단 시간과 비용 손실을 초래할 수있는 잠재적 인 문제를 방지하기 위해 하드웨어와 소프트웨어 모두 시스템이 올바르게 작동하는지 확인하는 몇 가지 방법을 살펴 봅니다.

Linux보고 프로세서 통계

mpstat를 사용하면 일회성 스냅 샷 또는 동적으로 각 프로세서의 활동을 개별적으로 또는 시스템 전체를 볼 수 있습니다.

이 도구를 사용하려면 sysstat를 설치해야합니다.

# yum update && yum install sysstat              [On CentOS based systems]
# aptitutde update && aptitude install sysstat   [On Ubuntu based systems]
# zypper update && zypper install sysstat        [On openSUSE systems]

Learn Sysstat 및 Linux의 유틸리티 mpstat, pidstat, iostat 및 sar에서 sysstat 및 유틸리티에 대해 자세히 알아보십시오.

mpstat를 설치했으면이를 사용하여 프로세서 통계 보고서를 생성하십시오.

2 초 간격으로 모든 CPU ( -P ALL로 표시됨)에 대한 CPU 사용률 ( -u )에 대한 3 개의 글로벌 보고서를 표시하려면 다음을 수행하십시오.

# mpstat -P ALL -u 2 3
Linux 3.19.0-32-generic (tecmint.com) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:41:07  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:09  IST  all    5.85    0.00    1.12    0.12    0.00    0.00    0.00    0.00    0.00   92.91
11:41:09  IST    0    4.48    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.53
11:41:09  IST    1    2.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:09  IST    2    6.44    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   92.57
11:41:09  IST    3   10.45    0.00    1.99    0.00    0.00    0.00    0.00    0.00    0.00   87.56

11:41:09  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:11  IST  all   11.60    0.12    1.12    0.50    0.00    0.00    0.00    0.00    0.00   86.66
11:41:11  IST    0   10.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   88.50
11:41:11  IST    1   14.36    0.00    1.49    2.48    0.00    0.00    0.00    0.00    0.00   81.68
11:41:11  IST    2    2.00    0.50    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:41:11  IST    3   19.40    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   79.60

11:41:11  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:13  IST  all    5.69    0.00    1.24    0.00    0.00    0.00    0.00    0.00    0.00   93.07
11:41:13  IST    0    2.97    0.00    1.49    0.00    0.00    0.00    0.00    0.00    0.00   95.54
11:41:13  IST    1   10.78    0.00    1.47    0.00    0.00    0.00    0.00    0.00    0.00   87.75
11:41:13  IST    2    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:13  IST    3    6.93    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   92.57

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    7.71    0.04    1.16    0.21    0.00    0.00    0.00    0.00    0.00   90.89
Average:       0    5.97    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   92.87
Average:       1    9.24    0.00    1.16    0.83    0.00    0.00    0.00    0.00    0.00   88.78
Average:       2    3.49    0.17    1.00    0.00    0.00    0.00    0.00    0.00    0.00   95.35
Average:       3   12.25    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   86.59

특정 CPU (다음 예에서는 CPU 0)에 대한 동일한 통계를 보려면 다음을 사용하십시오.

# mpstat -P 0 -u 2 3
Linux 3.19.0-32-generic (tecmint.com) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:42:08  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:42:10  IST    0    3.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:42:12  IST    0    4.08    0.00    0.00    2.55    0.00    0.00    0.00    0.00    0.00   93.37
11:42:14  IST    0    9.74    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   89.74
Average:       0    5.58    0.00    0.34    0.85    0.00    0.00    0.00    0.00    0.00   93.23

위 명령의 출력은 다음 열을 보여줍니다.

  1. CPU: Processor number as an integer, or the word all as an average for all processors.
  2. %usr: Percentage of CPU utilization while running user level applications.
  3. %nice: Same as %usr, but with nice priority.
  4. %sys: Percentage of CPU utilization that occurred while executing kernel applications. This does not include time spent dealing with interrupts or handling hardware.
  5. %iowait: Percentage of time when the given CPU (or all) was idle, during which there was a resource-intensive I/O operation scheduled on that CPU. A more detailed explanation (with examples) can be found here.
  6. %irq: Percentage of time spent servicing hardware interrupts.
  7. %soft: Same as %irq, but with software interrupts.
  8. %steal: Percentage of time spent in involuntary wait (steal or stolen time) when a virtual machine, as guest, is “winning” the hypervisor’s attention while competing for the CPU(s). This value should be kept as small as possible. A high value in this field means the virtual machine is stalling – or soon will be.
  9. %guest: Percentage of time spent running a virtual processor.
  10. %idle: percentage of time when CPU(s) were not executing any tasks. If you observe a low value in this column, that is an indication of the system being placed under a heavy load. In that case, you will need to take a closer look at the process list, as we will discuss in a minute, to determine what is causing it.

프로세서를 다소 높은 부하에 놓으려면 다음 명령을 실행 한 다음 별도의 터미널에서 mpstat (표시된대로)를 실행하십시오.

# dd if=/dev/zero of=test.iso bs=1G count=1
# mpstat -u -P 0 2 3
# ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
# mpstat -u -P 0 2 3

마지막으로, \"정상\"상황에서 mpstat의 출력과 비교하십시오.

위의 이미지에서 볼 수 있듯이 CPU 0은 % idle 열에 표시된 것처럼 처음 두 예에서 과부하 상태였습니다.

다음 섹션에서는 이러한 리소스를 많이 사용하는 프로세스를 식별하는 방법, 이에 대한 추가 정보를 얻는 방법 및 적절한 조치를 취하는 방법에 대해 설명합니다.

Linux 프로세스보고

CPU 사용량별로 정렬하는 프로세스를 나열하려면 -eo (사용자 정의 형식의 모든 프로세스 선택) 및 와 함께 잘 알려진 ps 명령을 사용합니다. "--sort (사용자 지정 정렬 순서 지정) 옵션은 다음과 같습니다.

# ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

위의 명령은 PID , PPID , 프로세스와 관련된 명령, CPU 사용량 비율로 정렬 된 CPU 및 RAM 사용량 비율을 내림차순으로 만 표시합니다. ". ".iso 파일을 생성하는 동안 실행될 때 출력의 처음 몇 줄은 다음과 같습니다.

관심있는 프로세스 (예 : PID = 2822 가있는 프로세스)를 식별하면 /proc/PID (/proc/2822 < 이 경우/code>) 디렉토리 목록을 수행합니다.

이 디렉토리는이 특정 프로세스에 대한 자세한 정보가있는 여러 파일 및 하위 디렉토리가 실행되는 동안 보관되는 곳입니다.

  1. /proc/2822/io contains IO statistics for the process (number of characters and bytes read and written, among others, during IO operations).
  2. /proc/2822/attr/current shows the current SELinux security attributes of the process.
  3. /proc/2822/cgroup describes the control groups (cgroups for short) to which the process belongs if the CONFIG_CGROUPS kernel configuration option is enabled, which you can verify with:
# cat /boot/config-$(uname -r) | grep -i cgroups

옵션이 활성화 된 경우 다음이 표시되어야합니다.

CONFIG_CGROUPS=y

cgroups 를 사용하면 OpenSUSE 시스템 분석 9 장에있는 Red Hat Enterprise Linux 7 리소스 관리 가이드의 1 ~ 4 장에 설명 된대로 프로세스별로 허용되는 리소스 사용량을 관리 할 수 있습니다. "및 조정 가이드와 Ubuntu 14.04 Server 설명서의 제어 그룹 섹션에 있습니다.

/proc/2822/fd 는 프로세스가 연 각 파일 설명자에 대한 하나의 심볼릭 링크를 포함하는 디렉토리입니다. 다음 이미지는 .iso 이미지를 만들기 위해 tty1 (첫 번째 터미널)에서 시작된 프로세스에 대한이 정보를 보여줍니다.

위 이미지는 stdin (파일 설명자 0), stdout (파일 설명자 1) 및 stderr (파일 설명자 2)가 각각/dev/zero, /root/test.iso 및/dev/tty1에 매핑되었음을 보여줍니다.

/proc 에 대한 자세한 내용은 Kernel.org에서 유지 및 유지 관리하는 \"/proc 파일 시스템\"문서와 Linux 프로그래머 매뉴얼에서 찾을 수 있습니다.

Linux에서 사용자 별 리소스 제한 설정

주의하지 않고 모든 사용자가 무제한의 프로세스를 실행하도록 허용하면 결국 예기치 않은 시스템 종료가 발생하거나 시스템이 사용할 수없는 상태가되어 잠길 수 있습니다. 이를 방지하려면 사용자가 시작할 수있는 프로세스 수를 제한해야합니다.

이렇게하려면 /etc/security/limits.conf를 편집하고 파일 하단에 다음 줄을 추가하여 제한을 설정합니다.

*   	hard	nproc   10

첫 번째 필드는 사용자, 그룹 또는 모두 (*) 를 나타내는 데 사용할 수있는 반면 두 번째 필드는 프로세스 (nproc) 수를 10으로 엄격하게 제한합니다. 변경 사항을 적용하고 로그 아웃했다가 다시 로그인하면 충분합니다.

따라서 루트 이외의 특정 사용자 (합법적이든 아니든)가 쉘 포크 폭탄을 시작하려고하면 어떻게되는지 살펴 보겠습니다. 제한을 구현하지 않은 경우 처음에는 함수의 두 인스턴스를 시작한 다음 끝없는 루프에서 각 인스턴스를 복제합니다. "따라서 결국 시스템이 크롤링됩니다.

그러나 위의 제한이 적용되면 포크 폭탄은 성공하지 못하지만 시스템 관리자가 관련된 프로세스를 종료 할 때까지 사용자는 여전히 잠 깁니다.

팁 : ulimit에 의해 가능한 다른 제한은 limits.conf 파일에 문서화되어 있습니다.

Linux 기타 프로세스 관리 도구

이전에 설명한 도구 외에도 시스템 관리자는 다음을 수행해야 할 수 있습니다.

a) renice를 사용하여 프로세스의 실행 우선 순위 (시스템 리소스 사용)를 수정합니다. 이는 커널이 할당 된 우선 순위 ( -20 에서 19 ).

값이 낮을수록 실행 우선 순위가 높아집니다. 일반 사용자 (루트 제외)는 자신이 소유 한 프로세스의 우수성을 더 높은 값 (낮은 실행 우선 순위를 의미)으로 만 수정할 수있는 반면, 루트는 모든 프로세스에 대해이 값을 수정할 수 있으며이를 늘리거나 줄일 수 있습니다.

renice의 기본 구문은 다음과 같습니다.

# renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

새 우선 순위 값 뒤의 인수가없는 경우 (비어 있음) 기본적으로 PID로 설정됩니다. "이 경우 PID = identifier를 사용하는 프로세스의 우수성은 로 설정됩니다.

b) 필요한 경우 프로세스의 정상적인 실행을 중단합니다. 이것은 일반적으로 프로세스 \"종료\"로 알려져 있습니다. 내부적으로 이것은 실행을 제대로 완료하고 사용 된 리소스를 순서대로 해제하라는 신호를 프로세스에 보내는 것을 의미합니다.

프로세스를 종료하려면 다음과 같이 kill 명령을 사용하십시오.

# kill PID

또는 pkill을 사용하여 지정된 소유자 (-u) , 그룹 소유자 (-G) 또는 PPID가있는 프로세스의 모든 프로세스를 종료 할 수 있습니다. "공통 (-P) . "이러한 옵션 뒤에는 숫자 표시 또는 식별자로 실제 이름이 올 수 있습니다.

# pkill [options] identifier

예를 들면

# pkill -G 1000

GID = 1000 인 그룹이 소유 한 모든 프로세스를 종료합니다.

과,

# pkill -P 4993 

PPID가 4993 인 모든 프로세스를 종료합니다.

pkill을 실행하기 전에 먼저 pgrep으로 결과를 테스트하는 것이 좋습니다. 아마도 -l 옵션을 사용하여 프로세스의 이름을 나열하는 것입니다. 동일한 옵션을 사용하지만 pkill이 사용되면 종료되는 프로세스의 PID 만 반환합니다 (추가 조치를 취하지 않음).

# pgrep -l -u gacanepa

이것은 다음 이미지에 설명되어 있습니다.

요약

이 기사에서는 Linux 시스템에서 중요한 하드웨어 및 소프트웨어 구성 요소의 무결성과 가용성을 확인하기 위해 리소스 사용을 모니터링하는 몇 가지 방법을 살펴 보았습니다.

또한 비정상적인 상황에서 적절한 조치를 취하는 방법 (주어진 프로세스의 실행 우선 순위를 조정하거나 종료하여)을 수행하는 방법도 배웠습니다.

이 튜토리얼에서 설명하는 개념이 도움이 되었기를 바랍니다. 질문이나 의견이 있으시면 아래 연락처 양식을 사용하여 언제든지 문의하십시오.

판권 소유. © Linux-Console.net • 2019-2023