[{"data":1,"prerenderedAt":784},["ShallowReactive",2],{"\u002Fblog\u002Fwhy-website-keeps-going-down":3},{"id":4,"title":5,"author":6,"body":8,"category":773,"date":774,"description":775,"extension":776,"image":777,"lastUpdated":777,"meta":778,"navigation":364,"path":779,"readingTime":780,"seo":781,"stem":782,"__hash__":783},"blog\u002Fblog\u002Fwhy-website-keeps-going-down.md","Why Your Website Keeps Going Down (8 Common Causes)",{"name":7},"Vantaj Team",{"type":9,"value":10,"toc":761},"minimark",[11,15,18,23,30,33,55,60,63,74,90,95,106,109,113,118,121,126,140,144,147,164,170,174,189,191,195,207,210,213,217,220,275,282,286,297,300,302,306,311,314,318,335,339,403,416,420,431,433,437,442,445,449,452,463,467,481,483,487,492,495,499,502,505,522,526,537,539,543,548,551,555,558,562,583,585,589,594,597,601,604,607,623,626,630,648,650,654,657,711,714,718,757],[12,13,14],"p",{},"Websites go down for a reason. If yours goes down repeatedly, the problem is usually one of a small set of known causes - and most of them are fixable once you identify which one you are dealing with.",[12,16,17],{},"This guide covers the 8 most common causes of recurring website downtime with practical diagnostics for each.",[19,20,22],"h2",{"id":21},"_1-server-resource-exhaustion","1. Server Resource Exhaustion",[12,24,25,29],{},[26,27,28],"strong",{},"What it looks like:"," Your site goes down under traffic spikes, during batch jobs, or at predictable times like deploy cycles or cron runs.",[12,31,32],{},"When a server runs out of CPU, memory, or disk space, it stops serving requests. The failure mode depends on which resource hits the limit:",[34,35,36,43,49],"ul",{},[37,38,39,42],"li",{},[26,40,41],{},"CPU exhaustion:"," requests slow to a crawl, then time out",[37,44,45,48],{},[26,46,47],{},"Memory exhaustion:"," processes crash or get killed by the OS; 502 or 503 errors follow",[37,50,51,54],{},[26,52,53],{},"Disk full:"," database writes fail, log rotation stops, application crashes on file I\u002FO",[12,56,57],{},[26,58,59],{},"How to diagnose:",[12,61,62],{},"Check server metrics at the time of each outage. Look for:",[34,64,65,68,71],{},[37,66,67],{},"CPU above 90% sustained for more than 30 seconds",[37,69,70],{},"Memory usage above 85% with no free swap",[37,72,73],{},"Disk usage above 90%",[12,75,76,77,81,82,85,86,89],{},"Most hosting providers (AWS, Fly.io, Railway, Render) surface these in their dashboard. For VPS, use ",[78,79,80],"code",{},"top",", ",[78,83,84],{},"free -h",", and ",[78,87,88],{},"df -h",".",[12,91,92],{},[26,93,94],{},"Fix:",[34,96,97,100,103],{},[37,98,99],{},"Scale your server vertically (more CPU\u002FRAM) or horizontally (more instances)",[37,101,102],{},"Identify and fix memory leaks in application code",[37,104,105],{},"Set up log rotation and disk space monitoring with alerts before the disk fills",[107,108],"hr",{},[19,110,112],{"id":111},"_2-database-connection-failures","2. Database Connection Failures",[12,114,115,117],{},[26,116,28],{}," Your application returns 500 errors. The web server is running but the app cannot reach the database. Often appears as \"connection pool exhausted\" or \"too many connections\" in logs.",[12,119,120],{},"Every request to a dynamic site touches the database. When the database becomes unreachable - due to connection limits, a crashed process, or network issues between the app and database host - every request fails.",[12,122,123],{},[26,124,125],{},"Common triggers:",[34,127,128,131,134,137],{},[37,129,130],{},"Connection pool size set too low for the request volume",[37,132,133],{},"Database process crashed due to OOM or configuration error",[37,135,136],{},"Network timeout between app server and database host",[37,138,139],{},"Database max connections limit reached (often 100 on default PostgreSQL setups)",[12,141,142],{},[26,143,59],{},[12,145,146],{},"Check your application logs for connection errors at the time of the outage. Look for:",[34,148,149,154,159],{},[37,150,151],{},[78,152,153],{},"FATAL: remaining connection slots are reserved",[37,155,156],{},[78,157,158],{},"could not connect to server",[37,160,161],{},[78,162,163],{},"Connection refused",[12,165,166,167],{},"On PostgreSQL, check active connections: ",[78,168,169],{},"SELECT count(*) FROM pg_stat_activity;",[12,171,172],{},[26,173,94],{},[34,175,176,183,186],{},[37,177,178,179,182],{},"Increase ",[78,180,181],{},"max_connections"," in your database config and provision a connection pooler (PgBouncer for PostgreSQL)",[37,184,185],{},"Set connection pool size in your app to match what the database can handle",[37,187,188],{},"Add database availability as a monitored dependency alongside your web endpoints",[107,190],{},[19,192,194],{"id":193},"_3-ssl-certificate-expiry","3. SSL Certificate Expiry",[12,196,197,199,200,203,204,89],{},[26,198,28],{}," Your site returns a browser security warning or stops loading entirely. Monitoring tools report ",[78,201,202],{},"SSL_ERROR_EXPIRED_CERT"," or ",[78,205,206],{},"certificate has expired",[12,208,209],{},"SSL certificates have expiry dates. When a certificate expires, browsers refuse to load the site over HTTPS. For users, the experience is the same as a full outage - they cannot access your service.",[12,211,212],{},"This is one of the most avoidable causes of downtime. It fails on a known date, with weeks of warning available.",[12,214,215],{},[26,216,59],{},[12,218,219],{},"Check your certificate expiry date:",[221,222,227],"pre",{"className":223,"code":224,"language":225,"meta":226,"style":226},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","echo | openssl s_client -connect yourdomain.com:443 2>\u002Fdev\u002Fnull | openssl x509 -noout -dates\n","bash","",[78,228,229],{"__ignoreMap":226},[230,231,234,238,242,246,250,253,256,259,262,264,266,269,272],"span",{"class":232,"line":233},"line",1,[230,235,237],{"class":236},"s2Zo4","echo",[230,239,241],{"class":240},"sMK4o"," |",[230,243,245],{"class":244},"sBMFI"," openssl",[230,247,249],{"class":248},"sfazB"," s_client",[230,251,252],{"class":248}," -connect",[230,254,255],{"class":248}," yourdomain.com:443",[230,257,258],{"class":240}," 2>",[230,260,261],{"class":248},"\u002Fdev\u002Fnull",[230,263,241],{"class":240},[230,265,245],{"class":244},[230,267,268],{"class":248}," x509",[230,270,271],{"class":248}," -noout",[230,273,274],{"class":248}," -dates\n",[12,276,277,278,281],{},"The output shows ",[78,279,280],{},"notAfter="," - the expiry date.",[12,283,284],{},[26,285,94],{},[34,287,288,291,294],{},[37,289,290],{},"Set up SSL certificate monitoring with alerts at 30 days, 14 days, and 7 days before expiry",[37,292,293],{},"Use Let's Encrypt with auto-renewal (via Certbot or your hosting platform)",[37,295,296],{},"Verify that auto-renewal is actually working - a misconfigured renewal script silently fails until the certificate expires",[12,298,299],{},"Vantaj monitors SSL certificate expiry for every HTTPS monitor and sends tiered alerts before it becomes an outage.",[107,301],{},[19,303,305],{"id":304},"_4-dns-configuration-errors","4. DNS Configuration Errors",[12,307,308,310],{},[26,309,28],{}," Your site stops loading with \"DNS_PROBE_FINISHED_NXDOMAIN\" or similar DNS errors. Monitoring reports the domain as unreachable.",[12,312,313],{},"DNS errors prevent browsers from finding your server at all. Your server can be fully healthy and the site still shows as down if DNS breaks.",[12,315,316],{},[26,317,125],{},[34,319,320,323,326,329,332],{},[37,321,322],{},"Nameserver records changed or removed accidentally",[37,324,325],{},"Domain expired (registrar stops resolving the domain)",[37,327,328],{},"DNS provider outage",[37,330,331],{},"TTL settings that cause stale records to persist after a migration",[37,333,334],{},"A record pointing to an IP address that no longer routes to your server",[12,336,337],{},[26,338,59],{},[221,340,342],{"className":223,"code":341,"language":225,"meta":226,"style":226},"# Check if the domain resolves\ndig yourdomain.com\n\n# Check nameservers\ndig NS yourdomain.com\n\n# Check from a different DNS resolver\ndig @8.8.8.8 yourdomain.com\n",[78,343,344,350,359,366,372,382,387,393],{"__ignoreMap":226},[230,345,346],{"class":232,"line":233},[230,347,349],{"class":348},"sHwdD","# Check if the domain resolves\n",[230,351,353,356],{"class":232,"line":352},2,[230,354,355],{"class":244},"dig",[230,357,358],{"class":248}," yourdomain.com\n",[230,360,362],{"class":232,"line":361},3,[230,363,365],{"emptyLinePlaceholder":364},true,"\n",[230,367,369],{"class":232,"line":368},4,[230,370,371],{"class":348},"# Check nameservers\n",[230,373,375,377,380],{"class":232,"line":374},5,[230,376,355],{"class":244},[230,378,379],{"class":248}," NS",[230,381,358],{"class":248},[230,383,385],{"class":232,"line":384},6,[230,386,365],{"emptyLinePlaceholder":364},[230,388,390],{"class":232,"line":389},7,[230,391,392],{"class":348},"# Check from a different DNS resolver\n",[230,394,396,398,401],{"class":232,"line":395},8,[230,397,355],{"class":244},[230,399,400],{"class":248}," @8.8.8.8",[230,402,358],{"class":248},[12,404,405,406,408,409,203,412,415],{},"If ",[78,407,355],{}," returns ",[78,410,411],{},"SERVFAIL",[78,413,414],{},"NXDOMAIN",", the problem is DNS.",[12,417,418],{},[26,419,94],{},[34,421,422,425,428],{},[37,423,424],{},"Monitor your domain expiry date (Vantaj does this natively)",[37,426,427],{},"Monitor DNS record changes - an alert when your A record changes can catch misconfigurations before they propagate",[37,429,430],{},"Use multiple nameservers and verify all of them resolve correctly",[107,432],{},[19,434,436],{"id":435},"_5-traffic-spikes-without-autoscaling","5. Traffic Spikes Without Autoscaling",[12,438,439,441],{},[26,440,28],{}," Your site handles normal load fine but goes down when traffic doubles. Recovery happens naturally once the spike passes.",[12,443,444],{},"An unexpected surge of traffic - from a viral post, a newsletter send, or a product launch - can overwhelm a fixed-capacity server that handles daily load without issue.",[12,446,447],{},[26,448,59],{},[12,450,451],{},"Check your server access logs against your uptime history. Look for:",[34,453,454,457,460],{},[37,455,456],{},"Request volume spike in the minutes before the outage",[37,458,459],{},"Response time degradation before the full failure",[37,461,462],{},"Load balancer connection queue growing",[12,464,465],{},[26,466,94],{},[34,468,469,472,475,478],{},[37,470,471],{},"Enable autoscaling on your hosting platform (most cloud providers support this)",[37,473,474],{},"Set up load testing before planned traffic events",[37,476,477],{},"Use a CDN to absorb static asset load so origin servers only handle dynamic requests",[37,479,480],{},"Configure rate limiting to prevent a single source from consuming all capacity",[107,482],{},[19,484,486],{"id":485},"_6-third-party-service-dependencies","6. Third-Party Service Dependencies",[12,488,489,491],{},[26,490,28],{}," Your site goes down but your own infrastructure is healthy. The outage timing correlates with a status event from Stripe, Auth0, Twilio, or another vendor.",[12,493,494],{},"Modern applications depend on many external services. When Stripe's API is unavailable, your checkout flow fails. When your auth provider goes down, nobody can log in. If your code does not handle these failures gracefully, one external dependency outage takes your whole site down.",[12,496,497],{},[26,498,59],{},[12,500,501],{},"Check the status pages of every external service your application calls. Cross-reference the timing with your own outage window.",[12,503,504],{},"Services to monitor:",[34,506,507,510,513,516,519],{},[37,508,509],{},"Payment processors (Stripe, Braintree)",[37,511,512],{},"Authentication providers (Auth0, Okta, Clerk)",[37,514,515],{},"Email delivery (SendGrid, Postmark, Resend)",[37,517,518],{},"Cloud providers (AWS, GCP, Azure)",[37,520,521],{},"CDN providers (Cloudflare, Fastly)",[12,523,524],{},[26,525,94],{},[34,527,528,531,534],{},[37,529,530],{},"Add vendor monitors to your uptime dashboard so you know immediately when a dependency goes down",[37,532,533],{},"Build timeout and fallback handling for every external API call",[37,535,536],{},"Display a maintenance page or degraded mode when critical dependencies are unreachable",[107,538],{},[19,540,542],{"id":541},"_7-deployment-failures","7. Deployment Failures",[12,544,545,547],{},[26,546,28],{}," Your site goes down immediately after a deployment. Recovery requires a rollback.",[12,549,550],{},"A bad deploy is one of the most common causes of downtime in actively developed products. A missing environment variable, a migration that locks a database table, or a dependency version conflict can take down production within seconds of a deploy.",[12,552,553],{},[26,554,59],{},[12,556,557],{},"Check your deployment timeline against your incident timeline. If outages consistently start within 5-10 minutes of a deploy, the deploy is the cause.",[12,559,560],{},[26,561,94],{},[34,563,564,571,574,577,580],{},[37,565,566,567,570],{},"Add a ",[78,568,569],{},"\u002Fhealth"," endpoint that checks database connectivity and critical dependencies - use it as the deploy health check",[37,572,573],{},"Use blue-green or canary deployments to roll out changes to a subset of traffic before full rollout",[37,575,576],{},"Run database migrations in a separate step from the application deploy",[37,578,579],{},"Set up an automatic rollback trigger if health checks fail after deploy",[37,581,582],{},"Test your rollback procedure before you need it under pressure",[107,584],{},[19,586,588],{"id":587},"_8-memory-leaks","8. Memory Leaks",[12,590,591,593],{},[26,592,28],{}," Your site performs normally after a fresh start but degrades over time. Restarting the server temporarily fixes the problem. The pattern repeats on a predictable cycle (every 12 hours, every few days).",[12,595,596],{},"A memory leak in your application code causes memory usage to grow steadily until the process gets OOM-killed or becomes too slow to serve requests.",[12,598,599],{},[26,600,59],{},[12,602,603],{},"Plot your server memory usage over time. A memory leak shows a consistent upward slope with sharp drops when the process restarts.",[12,605,606],{},"For Node.js applications:",[221,608,610],{"className":223,"code":609,"language":225,"meta":226,"style":226},"node --inspect app.js\n",[78,611,612],{"__ignoreMap":226},[230,613,614,617,620],{"class":232,"line":233},[230,615,616],{"class":244},"node",[230,618,619],{"class":248}," --inspect",[230,621,622],{"class":248}," app.js\n",[12,624,625],{},"Use Chrome DevTools to take heap snapshots before and after periods of heavy usage. Compare object counts between snapshots.",[12,627,628],{},[26,629,94],{},[34,631,632,635,642,645],{},[37,633,634],{},"Fix the memory leak in code (unbounded caches, event listeners that are never removed, circular references)",[37,636,637,638,641],{},"Set ",[78,639,640],{},"max-old-space-size"," in Node.js to limit heap growth and crash predictably instead of degrading silently",[37,643,644],{},"Use a process manager (PM2, systemd) that restarts the application automatically on crash",[37,646,647],{},"Set up memory usage monitoring with alerts at 80% and 90% thresholds",[107,649],{},[19,651,653],{"id":652},"build-a-diagnostic-checklist-for-every-outage","Build a Diagnostic Checklist for Every Outage",[12,655,656],{},"When your site goes down, run through these in order:",[658,659,660,669,675,681,687,693,699,705],"ol",{},[37,661,662,665,666],{},[26,663,664],{},"DNS"," - Does the domain resolve? ",[78,667,668],{},"dig yourdomain.com",[37,670,671,674],{},[26,672,673],{},"SSL"," - Is the certificate valid and current?",[37,676,677,680],{},[26,678,679],{},"Server health"," - CPU, memory, disk all within bounds?",[37,682,683,686],{},[26,684,685],{},"Database"," - Can the application connect?",[37,688,689,692],{},[26,690,691],{},"Recent deploy"," - Did an outage start within 10 minutes of a deployment?",[37,694,695,698],{},[26,696,697],{},"Third-party dependencies"," - Are upstream services showing incidents?",[37,700,701,704],{},[26,702,703],{},"Traffic spike"," - Did request volume jump before the failure?",[37,706,707,710],{},[26,708,709],{},"Memory trend"," - Has memory been climbing since the last restart?",[12,712,713],{},"The answer is almost always in this list. Knowing which category applies turns a 45-minute investigation into a 5-minute one.",[19,715,717],{"id":716},"related-guides","Related Guides",[34,719,720,727,733,739,745,751],{},[37,721,722],{},[723,724,726],"a",{"href":725},"\u002Fblog\u002Finstant-website-downtime-alerts","How to Get Instant Alerts When Your Website Goes Down",[37,728,729],{},[723,730,732],{"href":731},"\u002Fblog\u002Freduce-false-positive-alerts","How to Reduce False Positive Alerts in Uptime Monitoring",[37,734,735],{},[723,736,738],{"href":737},"\u002Fblog\u002Fssl-certificate-monitoring","SSL Certificate Monitoring Guide",[37,740,741],{},[723,742,744],{"href":743},"\u002Fblog\u002Fdns-monitoring-guide","DNS Monitoring Guide",[37,746,747],{},[723,748,750],{"href":749},"\u002Fblog\u002Fcost-of-downtime","Cost of Downtime",[37,752,753],{},[723,754,756],{"href":755},"\u002Fblog\u002Fwhat-to-monitor-checklist","What to Monitor Checklist",[758,759,760],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":226,"searchDepth":352,"depth":352,"links":762},[763,764,765,766,767,768,769,770,771,772],{"id":21,"depth":352,"text":22},{"id":111,"depth":352,"text":112},{"id":193,"depth":352,"text":194},{"id":304,"depth":352,"text":305},{"id":435,"depth":352,"text":436},{"id":485,"depth":352,"text":486},{"id":541,"depth":352,"text":542},{"id":587,"depth":352,"text":588},{"id":652,"depth":352,"text":653},{"id":716,"depth":352,"text":717},"tutorials","2026-06-04","If your website goes down repeatedly, the problem is almost never random. Here are the 8 most common causes of recurring website downtime - and what to do about each one.","md",null,{},"\u002Fblog\u002Fwhy-website-keeps-going-down",10,{"title":5,"description":775},"blog\u002Fwhy-website-keeps-going-down","dVLeiUcurF3G5pkpXomyCMhRMRpo3EG2N0dyEyTQRL4",1782668046812]