Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용한 리소스 사용 정보

<시간/>

UNIX 리소스 사용량을 측정하려면 프로그램에 리소스 모듈을 사용해야 합니다. 이 모듈은 또한 리소스 활용도를 제어할 수 있습니다.

이 모듈을 사용하려면 −

를 사용하여 가져와야 합니다.
리소스 가져오기

리소스 제한

이 모듈에서 setrlimit()를 사용하여 리소스 사용을 제한할 수 있습니다. 리소스를 제한하는 두 가지 매개변수가 있습니다. 이러한 매개변수는 소프트 한계와 하드 한계입니다. 소프트 제한은 기본적으로 현재 제한이며 프로세스를 통해 변경할 수 있지만 하드 제한을 초과할 수 없습니다. 하드 한도는 소프트 한도 이상의 값으로 줄일 수 있지만 늘릴 수는 없습니다.

자원 제한과 관련된 몇 가지 방법과 상수가 있습니다. 이것들입니다.

메서드 resource.getrlimit(resource)

이 메서드는 소프트 및 하드 제한을 튜플로 반환하는 데 사용됩니다. 지정된 리소스가 유효하지 않으면 ValueError가 발생합니다.

메서드 resource.setrlimit(리소스, 제한)

이 방법은 리소스에 대한 제한을 설정하는 데 사용됩니다. 제한은 소프트 제한과 하드 제한의 튜플로 할당될 수 있습니다. RLIM_INFINITY를 사용하여 리소스를 무제한으로 만들 수도 있습니다.

메서드 resource.prlimit(pid, resource[, limits])

이 메소드는 setrlimit() 및 getrlimit() 메소드의 조합입니다. 임의의 프로세스에 대해 동시에 리소스 제한을 가져오고 설정할 수 있습니다. pid가 0이면 현재 프로세스에서 작동합니다.

리소스 제한과 관련된 일부 상수 -

시니어 번호 상수 및 설명
1

RLIM_INFINITY

무제한 리소스 제한

2

RLIMIT_CORE

현재 프로세스에서 생성된 코어 파일의 최대 크기입니다.

3

RLIMIT_CPU

프로세서의 최대 프로세서 시간입니다. 제한을 초과하면 SIGXCCPU 신호가 프로세스로 전송됩니다.

4

RLIMIT_DATA

프로세서 힙의 최대 크기

5

RLIMIT_STACK

호출 스택의 최대 크기입니다. 다중 스레드 프로세스를 위해 메인 스레드의 스택을 사용합니다.

6

RLIMIT_NOFILE

현재 프로세스에 대한 열린 파일 설명자의 최대 수입니다.

7

RLIMIT_MEMLOCK

잠긴 메모리의 최대 주소 공간

8

RLIMIT_NICE

프로세스의 좋은 수준의 한도

9

RLIMIT_SWAP

스왑 공간의 최대 크기

10

RLIMIT_NTPS

시스템의 최대 의사 터미널 수

자원 사용

리소스 사용 관련 메소드 및 상수가 있습니다.

메서드 리소스.getrusage(누가)

이 메서드는 현재 프로세스 또는 그 자식이 사용하는 개체를 반환하는 데 사용됩니다. 다른 필드를 반환합니다. 반환 값 필드에서 리소스가 어떻게 사용되었는지에 대한 정보를 얻을 수 있습니다.

메서드 리소스.getpagesize()

이 메서드는 시스템 페이지의 바이트 수를 반환하는 데 사용됩니다. 실제 페이지 크기와 다를 수 있습니다.

리소스 사용량과 관련된 일부 상수입니다.

시니어 번호 상수 및 설명
1

RUSAGE_SELF

호출 프로세스에서 소비하는 리소스를 요청하는 데 도움이 됩니다. 서로 다른 스레드의 모든 리소스의 합계입니다.

2

RUSAGE_CHILDREN

자식 프로세스가 소비하는 리소스를 요청하는 데 도움이 됩니다.

3

RUSAGE_BOTH

호출 프로세스와 자식 프로세스가 소비하는 리소스를 요청하는 데 도움이 됩니다. 모든 시스템에서 사용할 수 있는 것은 아닙니다.

4

RUSAGE_THREAD

현재 스레드의 리소스 사용량입니다. 모든 시스템에서 사용할 수 있는 것은 아닙니다.

예시 코드

가져오기 resourceres_limits =resource.getrusage(resource.RUSAGE_SELF)print(res_limits)print('페이지 크기:' + str(resource.getpagesize()))resource.setrlimit(resource.RLIMIT_CPU, (1, 2))print ('Resource Limits:' + str(resource.getrlimit(resource.RLIMIT_CPU))) for a in range(1000):for b in range(1000):   for c in range(1000):      pass

출력

$ python3 example.pyresource.struct_rusage(ru_utime=0.035801, ru_stime=0.01074, ru_maxrss=9356, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=114 , ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=0, ru_nivcsw=17)페이지 크기:4096리소스 제한:(1, 2)CPU 시간 제한 초과(코어 덤프)