Monitorings

Redis latentuma lēcieni: kā atrast cēloni ar SLOWLOG, LATENCY un redis-cli

Redis atbild mikrosekundēs, līdz pēkšņi vairs ne. Parādās taimauti, p99 lec augšā, bet CPU grafiks izskatās normāls. Lūk, praktiska pārbaužu secība, kas atrod īsto cēloni.

· 12 min lasīšanai · AG Data komanda

Vairumam Redis latentuma lēcienu nav nekāda sakara ar to, ka Redis būtu "lēns". Redis izpilda komandas vienā galvenajā pavedienā, tāpēc viss, kas bloķē šo pavedienu uz 50 milisekundēm, liek katram klientam gaidīt 50 milisekundes. Uzdevums ir atrast, kas to bloķēja: viena smaga komanda, fork momentuzņēmumam, disks, kas aizkavēja fsync, hipervizors vai tīkls starp lietotni un serveri.

Vispirms: vai vainīgs Redis vai ceļš līdz tam?

Lietotnes taimauti mēra visu turp un atpakaļ ceļu. Pirms maināt kādu Redis iestatījumu, pārbaudiet, kur pazūd laiks:

redis-cli -h redis1 --latency            # aprites laiks no šī klienta
redis-cli -h redis1 --latency-history    # tas pats, pa laika logiem
redis-cli --intrinsic-latency 100        # palaist UZ servera, 100 sekundes
redis-cli -h redis1 INFO | grep latest_fork_usec

Redis latentuma rokasgrāmatā paskaidrots, ka --intrinsic-latency ar Redis vispār nesazinās. Tas mēra, cik ilgi kodols vai hipervizors notur procesu bez CPU, tāpēc tas jāpalaiž uz servera. Ja šis skaitlis jau ir vairākas milisekundes, neviena Redis noregulēšana jūs zem tā nenovedīs. Tā pati rokasgrāmata norāda, ka virtualizēti hosti ar trokšņainiem kaimiņiem var būt daudz sliktāki par fizisku serveri.

Ja --latency no lietotnes hosta ir augsts, bet no paša Redis hosta zems, skatieties uz tīklu, savienojumu mainību un klientu. Jauna savienojuma atvēršana katram pieprasījumam vai simtiem turp un atpakaļ ceļu MGET, konveijera vai skripta vietā pievieno latentumu, ko Redis nekad neredz.

SLOWLOG: komandas, kas bloķēja serveri

CONFIG GET slowlog-log-slower-than   # noklusējums 10000 (mikrosekundes = 10 ms)
CONFIG GET slowlog-max-len           # noklusējums 128 ieraksti
SLOWLOG LEN
SLOWLOG GET 25                       # jaunākie ieraksti: id, laiks, ilgums us, argumenti, klients
SLOWLOG RESET

Saskaņā ar SLOWLOG dokumentāciju lēnais žurnāls mēra tikai komandas izpildes laiku, nevis tīkla I/O vai atbildes sūtīšanu, un tieši šajā daļā galvenais pavediens nevar apkalpot nevienu citu. Katrā ierakstā ir ilgums mikrosekundēs, argumenti un klienta adrese, tāpēc parasti uzreiz redzams, kurš serviss to sūtīja.

Tipiski atradumi:

Noklusējuma slieksnis ir 10 ms, un tiek glabāti tikai 128 ieraksti, tāpēc noslogotā serverī veci ieraksti ātri pazūd. Ja vajag vēsturi, vāciet tos regulāri. Valkey 8.1 un jaunākās versijās lēnais žurnāls ir daļa no COMMANDLOG, kas seko arī lieliem pieprasījumiem un lielām atbildēm; vecie slowlog-* parametri joprojām darbojas, bet ir novecojuši.

Latentuma monitors: lēcieni, kas nav komandas

Daži apstāšanās gadījumi SLOWLOG nekad neparādās, jo tie nav komandu izpilde. Latentuma monitors mēra iekšējus notikumus, piemēram, fork, aof-write, aof-fsync-always, expire-cycle, eviction-cycle un active-defrag-cycle. Pēc noklusējuma tas ir izslēgts (slieksnis 0), un to var ieslēgt darbības laikā:

CONFIG SET latency-monitor-threshold 100   # milisekundes, 0 = izslēgts (noklusējums)
LATENCY LATEST
LATENCY HISTORY fork
LATENCY DOCTOR

Iestatiet slieksni uz to, ko jūsu lietotne uzskata par pārāk lēnu. Katram notikumam tiek glabāta 160 paraugu laika rinda. LATENCY DOCTOR izdrukā lasāmu kopsavilkumu ar ieteikumiem. Kopš Redis 7.0 ir arī latentuma uzskaite katrai komandai ar p50, p99 un p99.9 vērtībām INFO latencystats; tā pēc noklusējuma ir ieslēgta.

Tipiskie aizdomās turamie ārpus komandām

Pēdējais līdzeklis: programmatūras sargs (CONFIG SET watchdog-period 500) ieraksta žurnālā steka izsekojumu, ja serveris ir bloķēts ilgāk par periodu. Dokumentācija to sauc par eksperimentālu un paredzētu tikai atkļūdošanai. Izslēdziet to atpakaļ ar watchdog-period 0.

Kas mainās ar lielām datu kopām

Praktiska pārbaužu secība

  1. Mēriet no abām pusēm: --latency no lietotnes hosta un no Redis hosta, un --intrinsic-latency uz servera.
  2. Izlasiet SLOWLOG GET un salīdziniet ierakstus ar taimautu laiku.
  3. Ieslēdziet latentuma monitoru un pārbaudiet LATENCY LATEST un LATENCY DOCTOR.
  4. Salīdziniet lēcienus ar momentuzņēmumiem, AOF pārrakstīšanu, derīguma beigu viļņiem un izlaidumiem.
  5. Pārbaudiet OS: THP, mijmaiņu, diska latentumu, CPU steal virtuālajās mašīnās.

Galvenās atziņas

Redis Valkey Latentums SLOWLOG
Sadarbība ar mums

Redis taimauti produkcijā?

Mēs izmeklējam Redis un Valkey latentumu lielās produkcijas instancēs: lēnas komandas, lielas atslēgas, fork un noturības iestatījumus, kā arī OS un tīklu zem tām.

Sazināties Vairāk no emuāra