막힘이 발견되면
온라인 신청 서비스에서 가장 먼저 감지할 수 있으며, 비정상적인 통계를 앱 측에 추가할 수 있으며 이메일, SMS, WeChat을 통해 알람을 보낼 수 있습니다.
로그 시스템을 사용하여 예외를 계산하고 경보 논리를 트리거합니다.
Redis 모니터링 시스템을 사용하여 차단 문제를 발견하고 경보를 트리거합니다. 권장 CacheCloud 시스템.
본질적인 이유
API 또는 데이터 구조의 부당한 사용
고동시성 시나리오의 경우 대형 개체에서 알고리즘 복잡성이 O(n)O(n)을 초과하는 명령을 실행하지 마세요.
느린 쿼리 발견: Slowlog get {n}
큰 개체 발견: redis-cli -h{ip} -p{port} bigkeys
CPU 포화
CPU 포화는 단일 코어 CPU를 실행하는 Redis를 나타냅니다. 100%로.
redis 프로세스의 CPU 사용량을 확인하는 top 명령
redis-cli -h{ip} -p{port} –stat는 현재 Redis 사용량을 가져오고 동시성이 제한에 도달했는지 확인합니다.
info commandstats는 과도한 메모리 최적화
지속성 차단
1. 포크 차단
Redis 메인 스레드가 지속성을 완료하기 위해 하위 프로세스를 생성하기 위해 포크를 호출할 때 발생합니다. 파일 재작성
info stats 명령을 사용하여 redis의 최신 포크 작업에 시간이 걸렸음을 나타내는 last_fork_usec 표시기를 얻습니다
2. AOF 플러시가 차단되었습니다
파일 플러시는 일반적으로 하드 디스크가 1초에 한 번입니다. 압력이 너무 높아서 fsync는 쓰기가 완료될 때까지 기다려야 합니다
redis 로그 또는 정보 지속성을 확인하세요. 통계의 aof_delayed_fsync 표시
는 iotop을 사용하여 너무 많은 하드 디스크 리소스를 소비할 수 있는 프로세스를 확인할 수 있습니다
3. 쓰기 작업 차단
Transparent HugePages를 활성화하는 운영 체제의 경우 각 쓰기 명령으로 인해 복사되는 메모리 페이지 단위는 4KB입니다. 2MB가 되면
으로 인해 쓰기 작업의 실행 시간이 느려지고 쓰기에 대한 느린 쿼리가 많이 발생하게 됩니다. 운영
외부 이유
CPU 경쟁
1. redis는 전형적인 CPU 집약적 애플리케이션입니다. top 및 sar 명령을 사용하여 CPU 소비 시점과 프로세스를 찾습니다.
2. CPU 바인딩: 일반적인 최적화는 redis 프로세스를 CPU에 바인딩하는 것입니다. 이렇게 하면 포크 하위 프로세스가 다음과 같은 경우 CPU 컨텍스트 전환 오버헤드가 줄어듭니다. CPU 바인딩, 그리고 아버지와 아들 프로세스 사이에 치열한 CPU 경쟁이 있으며 이는 Redis의 안정성에 큰 영향을 미칩니다.
메모리 스왑
운영 체제가 Redis에서 사용하는 메모리를 하드 디스크로 스왑 아웃하면 스왑 이후 Redis의 성능이 급격히 떨어집니다.
Redis 메모리 스왑 확인 방법:
1. Redis 프로세스 번호를 쿼리합니다.
redis-cli info server | grep process_id
2. 프로세스 번호를 기준으로 메모리 스왑 정보를 쿼리합니다.
cat /proc/{process_id}/smaps | grep Swap
스왑 용량이 모두 0KB 또는 4KB인 경우 정상.
메모리 스와핑 방지:
1. 머신에 사용 가능한 메모리가 충분한지 확인하세요.
2. 극단적인 경우 Redis 메모리가 제어할 수 없이 증가하는 것을 방지하기 위해 모든 Redis 예제에서 사용 가능한 최대 메모리(maxmemory)를 설정했는지 확인하세요. echo 10>/proc/sys/vm/swappiness
네트워크 문제1. 연결이 거부되었습니다
네트워크 중단: 일반적으로 네트워크 중단 또는 대역폭 부족
redis 연결과 같은 스왑 우선 순위의 시스템 사용 거부됨:
연결 수가 maxclients보다 크면 새 연결을 거부합니다. 정보 통계의 거부된 연결 표시
클라이언트는 NIO 긴 연결 또는 연결 풀을 최대한 많이 사용하여 Redis에 액세스합니다.
redis는 많은 수에 액세스하는 데 사용됩니다. 수명 주기가 짧은 분산 노드의 시나리오(예: Map/Reduce)에서는 Redis가 유효하지 않은 연결을 적극적으로 확인하고 닫을 수 있도록 tcp-keepalive 및 시간 제한 매개 변수를 설정하는 것이 좋습니다.
연결 오버플로:
프로세스 제한 : 프로세스가 열 수 있는 최대 파일 수를 제어합니다. ulimit -n, 일반적으로 1024, 연결 수가 많은 Redis는 이 값을 늘려야 합니다
백로그 대기열 오버플로: 시스템은 백로그 대기열을 사용하여 특정 위치에 tcp 연결을 저장합니다. Redis의 기본값은 511이고 시스템 백로그의 기본값은 128입니다. cron을 사용하여 온라인에서 netstat -s | grep 오버플로 통계를 정기적으로 실행할 수 있습니다.
머신 간 네트워크 대기 시간을 측정하세요
redis-cli -h{ip} -p{port} –latency redis-cli -h{ip} -p{port} –latency-history 默认15秒完成一行统计,-i控制采样时间 redis-cli -h{ip} -p{port} –latency-dist 统计图展示,每1秒采样一次
3. Interrupt
단일 네트워크 카드 대기열은 하나의 CPU만 사용할 수 있습니다. 높은 동시성에서는 네트워크 카드 데이터 상호 작용이 동일한 CPU에 집중되어 다중 코어 CPU 상황을 완전히 활용할 수 없게 됩니다.
일반적으로 네트워크 트래픽 처리량이 높은 시나리오에서 나타납니다.
더 많은 Redis 지식을 보려면
redis 소개 튜토리얼칼럼을 주목하세요.
위 내용은 Redis 차단 원인에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!