Redis 지속성 프로세스는 항상 Redis 성능에 영향을 미치는 일반적인 요소였습니다. 지속성을 모니터링하는 방법과 지속성 프로세스를 최적화하는 방법은 무엇입니까? 아래를 살펴보겠습니다.
포크 모니터링 및 최적화
RDB 지속성 또는 AOF 재작성 등 어떤 종류의 지속성을 사용하든 기본 프로세스는 하위 프로세스를 포크하고 하위 프로세스에서 rdb 파일 또는 aof 생성을 완료합니다. 고쳐 쓰기. 포크 작업은 운영 체제에 비해 상대적으로 무거운 작업입니다. 포크 단계에서 redis는 일정 기간 동안 차단됩니다. 차단 시간은 Redis 데이터가 차지하는 메모리 크기에 정비례합니다. 각 1G 메모리 포크는 20밀리초가 걸립니다.
포크 단계의 차단 시간을 알고 싶다면 info stats 명령을 사용하여 최신_포크_usec 옵션 값을 확인할 수 있으며 단위는 마이크로초입니다. 밀리초가 아니라 마이크로초라는 점을 기억하세요.
# redis-cli info stats | grep latest latest_fork_usec:323
포크 최적화 방법:
redis가 차지하는 메모리 크기를 제어합니다. 메모리 사용량이 너무 많으면 애플리케이션을 분할하여 여러 서버에 배포하여 Redis의 메모리 사용량을 공유할 수 있습니다.
포크 작동 빈도를 적절히 줄이세요.
메모리 모니터링
RDB 지속성 로그는 다음과 같습니다.
…… 21692:C 15 May 2020 14:17:06.935 * DB saved on disk 21692:C 15 May 2020 14:17:06.936 * RDB: 2 MB of memory used by copy-on-write ……
RDB 지속성 프로세스가 2M 메모리를 소비하는 것을 볼 수 있습니다.
AOF 지속성 로그는 다음과 같습니다.
…… 15786:C 23 May 2020 07:39:59.145 * AOF rewrite: 2MB of memory used by copy-on-write 10679:M 23 May 2020 07:39:59.201 * Background AOF rewrite terminated with success 10679:M 23 May 2020 07:39:59.201 * Residual parent diff successfully flushed to the rewritten AOF (0.02 MB) 10679:M 23 May 2020 07:39:59.201 * Background AOF rewrite finished successfully
Aof 다시 쓰기에 사용된 메모리가 2MB+0.02MB=2.02MB
지속성 프로세스 중 메모리 사용량을 모니터링하려면 redis를 계산하는 쉘 스크립트 로그의 관련 정보.
하드 디스크 모니터링
Redis 지속성 프로세스는 하드 디스크에 부담을 줍니다. 지속성 후에는 메모리의 데이터가 하드 디스크에 저장되기 때문입니다.
Linux 시스템에서 하드 디스크를 모니터링하는 명령에는 sar, iostat 등이 있습니다. 하드 디스크 IO 압력이 임계값을 초과하는 것으로 확인되면 Redis 로그에 따라 지속 시간을 비교하여 원인이 무엇인지 확인합니다. redis 지속성으로 인한 압력.
여기에서는 최적화 방법에 대해 두 가지 사항이 언급됩니다.
성능이 좋은 디스크를 사용하세요. 기계식 하드 드라이브는 확실히 솔리드 스테이트 드라이브만큼 좋지 않습니다.
단일 머신에 여러 Redis 인스턴스가 구성된 경우 이를 다른 디스크에 기록하여 디스크에 대한 쓰기 부담을 줄일 수 있습니다.
단일 머신 다중 인스턴스 배포
redis는 단일 스레드 아키텍처이므로 서버에 하나의 Redis 인스턴스만 배포하면 멀티 코어 CPU가 낭비됩니다. 따라서 일반적으로 하나의 서버에 여러 개의 Redis 애플리케이션이 배포됩니다. 예를 들어 세 개의 Redis 서비스가 열려 있고 포트 번호는 6379, 6380, 6381입니다. 6379는 캐싱 서비스에 사용되고 6380은 메시지 대기열에 사용됩니다. 태그 및 추천 시스템에 사용됩니다.
이렇게 하면 실제로 CPU를 최대한 활용할 수 있지만 쉽게 문제가 발생할 수 있습니다. 여러 인스턴스가 동시에 지속되면 CPU, 메모리 및 비디오에 대한 부담이 매우 높아집니다. 한 번에 하나의 인스턴스만 유지되도록 이를 격리하는 것이 좋습니다.
이 효과를 달성하기 위한 의사 코드는 다음과 같습니다.
while (true) { $redisObj = [6379,6380,……]; foreach ($redisObj as $obj) { // 该实例是否构成重写的要求 if (rewriteConf($ojb)) { // 该实例进行持久化 } } }
foreach를 사용하여 각 Redis 인스턴스를 순회한 다음 인스턴스가 재작성 조건을 충족하는지 확인하고, 충족되면 재작성을 시작합니다. 이러한 방식으로 여러 Redis 인스턴스를 유지하고 격리할 수 있습니다.
위 내용은 Redis 지속성 프로세스 모니터링 및 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!