General

Goh Ling Yong : I Uncovered My Lost Year in a Server's Error Logs - Goh Ling Yong

Goh Ling Yong
9 min read
0 views
#uncovered#server's#error

The command line cursor blinked, a patient, white rectangle on a black sea. I was hunting a ghost in the machine, a bug that only surfaced on the third Tuesday of the month if the moon was waxing gibbous and the user was logged in from a specific IP block in Eastern Europe. Or so it seemed. The reality was more mundane, probably a cron job clashing with a database backup.

My fingers typed out the command automatically, a familiar incantation to pull system logs from the past year. grep -i "error" /var/log/app/production.log. I was looking for a pattern, a clue in the digital detritus. What I wasn't looking for was myself.

The server churned, and a torrent of text scrolled up my screen, a year’s worth of machine-generated anguish. Timestamps, process IDs, and terse, emotionless reports of failure. Connection Timed Out. Permission Denied. Fatal Error. It was the cold, objective language of a system simply stating what was wrong. And then I saw a date: March 12th. I froze. The text blurred. That was the day she left.

FATAL: Database Connection Refused

Last March, I didn’t think I was falling apart. I thought I was holding it together with remarkable efficiency. We had the conversation—the one that had been hovering in the air for months, thick and unspoken like humidity before a storm. It was calm, horribly civil. We used words like “divergent paths” and “what’s best for both of us.” We divided books and furniture with the sterile precision of a database partition.

She cried. I did not. I felt a strange, hollow buzzing in my chest, the hum of a server room. My primary function was to complete the task. I helped her pack her boxes into her brother’s car. I watched it drive away. I went back inside, made a cup of tea, and opened my laptop. I pushed a minor bug fix to the production server at 11:47 PM. I remember thinking, with a bizarre sense of pride, about my uptime. My personal system was still running, even under heavy load.

But here, in the logs, was a different story.

[2023-03-12 23:51:02] FATAL: database connection refused by user 'webapp' on database 'primary_shard'
[2023-03-13 01:15:33] FATAL: database connection refused...
[2023-03-13 02:40:19] FATAL: database connection refused...

For six hours that night, the application had completely disconnected from its primary data source. It kept trying to connect, every hour or so, and was brutally, repeatedly denied. A simple configuration error I had introduced in my late-night fix. A stupid, amateur mistake. I had no memory of the all-hands-on-deck emergency call that must have happened. I have no recollection of fixing it. I had, apparently, checked in the corrective code at 5:22 AM.

Looking at the timestamps, I didn't see a systems failure. I saw a man sitting alone in a silent apartment, staring at a screen while his own internal connections were being severed. I saw a man trying to pour his entire being into the one logical, predictable system he had left, only to break that, too. The log wasn’t a record of a bug. It was a record of shock. The machine was screaming what I couldn’t feel.

WARNING: High Memory Usage, Potential Leak

The summer was a blur of long days and takeout containers. I volunteered for every on-call rotation. I took on the gnarliest refactoring projects, the ones everyone else avoided. Work was a refuge, a place of clean logic and solvable problems. You find the bug, you write the patch, you run the tests, you deploy the fix. The world makes sense again.

My friends would call. “How are you doing?”

“Busy,” I’d say. “Good, though. Work is great.”

And it was. I was promoted. My boss called me a rock. My colleagues relied on me. I was a high-performance node, processing tasks with maximum efficiency. But performance comes at a cost.

The server logs from June and July told the story my own memory had compressed into a single, beige-colored file labeled “Work.”

[2023-06-21 14:10:00] WARNING: high memory usage on worker-7 (98.7%)
[2023-06-28 15:03:12] WARNING: high memory usage on worker-7 (99.1%)
[2023-07-05 16:30:00] WARNING: memory usage critical. potential leak in process 4182

A memory leak is a quiet, insidious thing. It’s not a crash. It’s a slow bleed. A process fails to release the resources it’s finished with, holding onto them, accumulating more and more until the whole system groans under the weight, becoming sluggish, unresponsive. Eventually, if left unchecked, it brings everything to a halt.

That was my summer. I wasn’t processing my grief; I was allocating it to a persistent background thread and never letting it go. Every late night at the office, every skipped lunch, every weekend spent refactoring legacy code instead of seeing other human beings—it was all just another allocated block of memory I refused to release. The system was running hot, red-lining, and I was calling it productivity. The warnings were there, plain as day, not on a dashboard, but in the concerned texts from my sister I’d answer with a thumbs-up emoji, in the way my own reflection looked hollow-eyed and unfamiliar in the bathroom mirror. The system was warning me of imminent failure, and I was ignoring the alerts.

ERROR: Null Pointer Exception

By September, a kind of exhaustion had settled deep in my bones. The frantic energy of the summer had burned away, leaving a low, gray ash. I started going through the motions. Wake up, commute, code, commute, sleep. I tried to reconnect with the person I was before. I went to a bar I used to love and felt nothing. I put on a record we used to listen to and felt only silence. I was trying to access a part of myself that was no longer there.

In programming, a null pointer exception is one of the most common and frustrating errors. It’s what happens when you ask the code to find something that simply isn’t there. You try to use a variable that points to nothing. It’s an empty space where a value, an object, a something, should be. The program expects a person to be at a specific address in memory, but when it goes to knock on the door, it finds the house was demolished. The system crashes.

On my screen, the logs for September were littered with them.

[2023-09-15 10:05:41] ERROR: NullPointerException at user.session.getLastLogin() on line 243
[2023-09-15 10:05:41] ERROR: NullPointerException at user.profile.getAvatarUrl() on line 88
[2023-09-15 10:05:41] ERROR: NullPointerException at recommendations.engine.fetchUserHistory() on line 152

A single, rare bug was causing a cascading failure. When a user who had deleted their account tried to log back in, the system couldn’t find their data. It reached for a user object and found null. And instead of handling that gracefully, it panicked. It crashed.

That’s how September felt. I was the program, reaching for a memory, a feeling, a shared history, and finding a void. I would scroll through my phone, my thumb hovering over her contact photo, and feel that null value. It was the empty space on the passenger side of my car. It was the phantom limb of her hand in mine as I walked down the street. I wasn’t just sad anymore. I was a walking, breathing null pointer exception, crashing every time I tried to access a part of my own life that had been permanently deleted.

INFO: System Reboot Initiated

The year ended not with a bang, but with a quiet acknowledgment of the need to start over. In December, on a whim, I booked a cheap flight to a small coastal town I’d never been to. I didn’t pack much. I didn’t tell many people where I was going. I just went.

I walked on a cold, windswept beach for three days. I didn’t think about work. I didn’t think about her. I didn’t really think about anything. I just watched the waves crash, pull back, and crash again. I ate fish and chips out of a newspaper cone. I read a paperback novel in a pub where an old man nursed the same pint of stout for two hours. It was the first time in a year I had intentionally done nothing.

The last log entry that caught my eye wasn't an error or a warning. It was simple, informational.

[2023-12-28 03:00:00] INFO: System reboot initiated by administrator.

Someone—probably me, during a late-night maintenance window I don’t remember—had decided the server was too unstable. Too many errors, too many hung processes. The best solution wasn’t another patch or a quick fix. It was to turn it off and turn it back on again. A clean slate. A fresh start.

A reboot doesn't erase the logs. The record of the failures remains. But it does clear the active memory. It ends the runaway processes. It allows the system to start again from a known, stable state.

My trip to the coast wasn’t a magic cure. It didn’t fix me. But it was a reboot. It was the first time I consciously stopped trying to patch the broken code of the last year and just let the system power down. In the quiet, I could finally see the damage not as a series of personal failings, but as a chain of events, of causes and effects. An impersonal, unforgiving record of a system under stress.

My terminal is still blinking. I never found the bug I was originally looking for. It doesn’t seem to matter anymore. I’ve found something far more important. A year of my life I thought was lost, a story I thought I had forgotten how to tell, was here all along. It was written in a language I understood better than my own feelings.

We all have our logs. They are stored in our bodies, in our habits, in the silences with our friends, in the work we use to hide from our lives. Most of the time we ignore them. We filter for the critical errors and move on. But sometimes, if you look at the whole, unedited transcript, you find the narrative. You find the proof that even when you were disconnected, leaking, and crashing, you were still running. You were still logging. You were still here.



More Stories You'll Love

Connect with Me

Follow for more stories and updates.

Thank you for reading! If you found this helpful, please share it with others.


📖 Read on Medium

This article was originally published on Medium. You can also read it there:

Read this article on Medium

If you enjoyed this article, please consider giving it a clap on Medium and following for more content!

Related Articles

General

Goh Ling Yong : The Coordinates of the Person I Used to Be - Goh Ling Yong

On the day my marriage ended, I buried a small box in the woods. Ten years later, I went back to find it.

8 min read
General

Goh Ling Yong : The Unclaimed Property Office of My Last Relationship - Goh Ling Yong

On the archaeology of a shared life, and the quiet labor of curating someone else’s ghosts.

8 min read
General

Goh Ling Yong : The Half-Life of My Father's Anger - Goh Ling Yong

It took 28.7 years for his rage to decay into something I could finally understand.

8 min read