hdbsql
메모리가 너무 부족할 때 SAP 명령줄 도구(HANA 테이블 캐시 정리를 돕기 위해)를 실행해야 하는 상황이 발생했습니다.
이 문제를 어떻게 가장 잘 해결할 수 있습니까? 일정을 사용하여 쉘 스크립트의 명령에서 여유 메모리 값을 추출하는 아이디어가 있지만 top
(또는 %를 얻기 위해 free/max*100을 얻는 것이 더 좋습니다) crontab
어디에서나 가능한 방법을 찾을 수 없습니다. 아무것도 시작할 수가 없어요.
답변1
awk
백분율을 계산하는 데 사용할 수 있습니다 .test
예를 들어 값이 90%를 초과하는지 확인하는 유틸리티입니다. cronjob은 다음과 같습니다.
/usr/bin/test 90 -le $(/usr/bin/awk '$1=="MemTotal:"{t=$2} $1=="MemFree:"{f=$2} END{printf "%d", (t-f)/(t/100)}' /proc/meminfo) && command-to-cleanup
이 awk
부분에서는 필요한 값을 추출한 /proc/meminfo
다음 사용된 메모리의 비율을 계산합니다. 이 유틸리티는 90이 계산된 값 test
보다 작거나 같은지 ( ) 확인합니다 . -le
다음 부분은 &&
메모리를 정리하는 도구입니다 ( .. && command-to-cleanup
). 이 cronjob은 1분마다 실행될 수 있습니다. 예를 들면 다음과 같습니다.
* * * * * root /usr/bin/test 90 -le $(/usr/bin/awk '$1=="MemTotal:"{t=$2} $1=="MemFree:"{f=$2} END{printf "%d", (t-f)/(t/100)}' /proc/meminfo) && command-to-cleanup
답변2
IMHO, Linux 시스템의 사용 가능한 메모리 비율은 Linux 메모리 관리 작동 방식으로 인해 이 경우 좋은 지표가 아닙니다(메모리는 버퍼링, 캐싱, 스와핑 등에 사용됨). 많은 정보 테마. 즉, 이러한 표시기를 사용하면 실제로 필요한 것보다 더 일찍 캐시가 지워져 전체 성능이 저하될 수 있습니다.
나는 이러한 모든 요소를 고려할 때 일반적으로 사용된 스왑 비율이 시스템의 메모리가 부족하다는 것을 나타내는 더 나은 지표라는 것을 발견했습니다. 메모리를 할당할 수 있는 한 일반적으로 스왑을 사용하지 않습니다.
추가 보너스로 이는 성능 지표로도 사용됩니다. 예를 들어 4G 이상의 스왑 공간을 사용하는 시스템은 크롤링이 거의 불가능한 경우가 많습니다(4G 디스크 파일을 한 위치에서 다른 위치로 복사하는 데 걸리는 시간을 생각해 보세요).
다음에서 정보를 교환할 수 있습니다./proc/메모리 정보따라서 Chaos가 제안한 방법은 그에 따라 조정될 수 있습니다.
SwapTotal: 16777212 kB
SwapFree: 16777212 kB
특정 상황에 더 적합한 스왑 사용 비율 값을 찾으려면 몇 가지 실험을 수행해야 할 수도 있습니다.