-
An Avalanche Investigation: One Synchronous Blocking Call Froze the Entire Event Loop
The service was mysteriously being drained and rebuilt in batches. The database looked pretty stable too, so after digging around for quite a while, I finally found the culprit: a third-party SDK was quietly making a synchronous blocking call inside an `async` function, freezing the event loop for several seconds and triggering a whole cascading failure chain.
-
A Database Avalanche Incident Investigation
The first thing I saw after being pulled into the incident chat was: "Every API is timing out." We stopped the bleeding first and gave the database a chance to recover, then circled back to figure out why a hidden risk planted two and a half days earlier would suddenly blow up all at once at that exact moment. Following the trail, it turned out to be a complete chain of events: an analytical query that had been left running, a high-traffic endpoint with a missing index, and a distributed lock that got released at exactly the wrong time. All three lined up and detonated together.
-
How to Elegantly Connect a Local GUI Client to a Private Redis on AWS / GCP
Say Goodbye to Tedious and Fragile SSM Port Forwarding: Use SSH Tunnels to Give Desktop Clients Smooth Direct Access to Redis Across Multiple Environments
-
An Emergency Production Incident: Redis Memory Exhaustion, Precise Cleanup, and an Architectural Postmortem
Redis Memory Hit 99.98% in Production and Triggered Eviction Alerts: How We Precisely Cleaned Up 50% of Cold Data Using LRU Idle Time to Free 4GB of Memory, and a Postmortem on the Architectural Risks Behind It
-
Investigating a Slow Memory Leak: Creating a New OpenAI Client Every Time, with the Real Issue in the Event Loop
While investigating a slow memory leak in a service, I came across a piece of background enrichment logic a teammate had written: on every call, it instantiated a brand-new `AsyncOpenAI` client, and the connection pool quietly piled up into a leak. I wanted to simply cache and reuse the client, but it turned out that didn’t work at all—the root cause was the lifecycle of the event loop.
-
Built an IDEA Plugin That Brings GitHub Actions into the Git Panel
Every time I just want to check whether an Action has run, I have to switch out and open a browser. So I figured I might as well just build one myself.
Selected articles
Lenovo 510smini mini PC
The naming convention for coding summarized by myself hopefully can give you a reference
Why e-waste often has a second life
Open source software
Automatically caching method data annotations