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