{"id":2938,"date":"2025-12-05T15:37:17","date_gmt":"2025-12-05T12:37:17","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/how-to-avoid-the-resource-limit-reached-error-on-shared-hosting\/"},"modified":"2026-11-04T10:46:40","modified_gmt":"2026-11-04T07:46:40","slug":"fix-resource-limit-reached","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/en\/fix-resource-limit-reached\/","title":{"rendered":"Resource Limit Reached: Diagnosis and Fix Validation"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><p>Diagnose \u201cResource Limit Reached\u201d by starting with the failed operation and its time. On CloudLinux shared hosting, CPU or disk throttling, Apache EP entry refusal and PMEM\/NPROC failures need different evidence. This guide connects those findings to a targeted change and a comparable before\/after check, while preserving required caching, backups and scheduled work.<\/p>\n<div id=\"toc_container\" role=\"navigation\" aria-label=\"Table of Contents\" data-nosnippet class=\"toc_transparent no_bullets toc_numbered toc_title_center\"><p class=\"toc_title\">\u0130\u00e7indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Identify_the_Environment_Before_Assigning_a_Cause\"><span class=\"toc_number toc_depth_1\">1.<\/span> Identify the Environment Before Assigning a Cause<\/a><ul><li><a href=\"#CPU_Processor_Time\"><span class=\"toc_number toc_depth_2\">1.1.<\/span> CPU (Processor Time)<\/a><\/li><li><a href=\"#RAM_Physical_Memory_Usage\"><span class=\"toc_number toc_depth_2\">1.2.<\/span> RAM (Physical Memory Usage)<\/a><\/li><li><a href=\"#IO_and_IOPS_Disk_InputOutput\"><span class=\"toc_number toc_depth_2\">1.3.<\/span> I\/O and IOPS (Disk Input\/Output)<\/a><\/li><li><a href=\"#EP_Entry_Processes\"><span class=\"toc_number toc_depth_2\">1.4.<\/span> EP (Entry Processes)<\/a><\/li><\/ul><\/li><li><a href=\"#1_Record_the_Failure_and_Correlate_the_Evidence\"><span class=\"toc_number toc_depth_1\">2.<\/span> 1. Record the Failure and Correlate the Evidence<\/a><ul><li><a href=\"#Step_1_Open_the_Resource_Usage_Tool\"><span class=\"toc_number toc_depth_2\">2.1.<\/span> Step 1: Open the Resource Usage Tool<\/a><\/li><li><a href=\"#Step_2_Match_Spikes_to_Events\"><span class=\"toc_number toc_depth_2\">2.2.<\/span> Step 2: Match Spikes to Events<\/a><\/li><li><a href=\"#Step_3_Use_Access_Logs_and_Slow_Logs\"><span class=\"toc_number toc_depth_2\">2.3.<\/span> Step 3: Use Access Logs and Slow Logs<\/a><\/li><li><a href=\"#Symptom_Evidence_and_Outcome_Check\"><span class=\"toc_number toc_depth_2\">2.4.<\/span> Symptom, Evidence and Outcome Check<\/a><\/li><\/ul><\/li><li><a href=\"#2_Choose_a_Cause_to_Investigate\"><span class=\"toc_number toc_depth_1\">3.<\/span> 2. Choose a Cause to Investigate<\/a><ul><li><a href=\"#1_No_or_Ineffective_Caching\"><span class=\"toc_number toc_depth_2\">3.1.<\/span> 1. No (or Ineffective) Caching<\/a><\/li><li><a href=\"#2_Heavy_or_Poorly_Coded_Plugins_and_Themes\"><span class=\"toc_number toc_depth_2\">3.2.<\/span> 2. Heavy or Poorly Coded Plugins and Themes<\/a><\/li><li><a href=\"#3_Bots_Crawlers_and_Brute-Force_Attacks\"><span class=\"toc_number toc_depth_2\">3.3.<\/span> 3. Bots, Crawlers and Brute-Force Attacks<\/a><\/li><li><a href=\"#4_Backup_Scan_or_Cron_Jobs_Running_at_Peak_Times\"><span class=\"toc_number toc_depth_2\">3.4.<\/span> 4. Backup, Scan or Cron Jobs Running at Peak Times<\/a><\/li><li><a href=\"#5_Growing_Traffic_on_an_Old_Plan\"><span class=\"toc_number toc_depth_2\">3.5.<\/span> 5. Growing Traffic on an Old Plan<\/a><\/li><\/ul><\/li><li><a href=\"#3_Reduce_the_Measured_CPU_Work\"><span class=\"toc_number toc_depth_1\">4.<\/span> 3. Reduce the Measured CPU Work<\/a><ul><li><a href=\"#1_Enable_and_Tune_Full-Page_Caching\"><span class=\"toc_number toc_depth_2\">4.1.<\/span> 1. Enable and Tune Full-Page Caching<\/a><\/li><li><a href=\"#2_Use_a_Compatible_Supported_PHP_Version\"><span class=\"toc_number toc_depth_2\">4.2.<\/span> 2. Use a Compatible, Supported PHP Version<\/a><\/li><li><a href=\"#3_Remove_or_Replace_Heavy_Plugins_and_Themes\"><span class=\"toc_number toc_depth_2\">4.3.<\/span> 3. Remove or Replace Heavy Plugins and Themes<\/a><\/li><li><a href=\"#4_Optimize_Database_Queries\"><span class=\"toc_number toc_depth_2\">4.4.<\/span> 4. Optimize Database Queries<\/a><\/li><li><a href=\"#5_Offload_Heavy_Tasks_to_Cron_Jobs_at_Off-Peak_Times\"><span class=\"toc_number toc_depth_2\">4.5.<\/span> 5. Offload Heavy Tasks to Cron Jobs at Off-Peak Times<\/a><\/li><\/ul><\/li><li><a href=\"#4_Separate_Memory_Failures_from_Entry_and_Process_Limits\"><span class=\"toc_number toc_depth_1\">5.<\/span> 4. Separate Memory Failures from Entry and Process Limits<\/a><ul><li><a href=\"#1_Make_Requests_Finish_Faster\"><span class=\"toc_number toc_depth_2\">5.1.<\/span> 1. Make Requests Finish Faster<\/a><\/li><li><a href=\"#2_Reduce_Background_AJAX_and_Heartbeat_Requests\"><span class=\"toc_number toc_depth_2\">5.2.<\/span> 2. Reduce Background AJAX and Heartbeat Requests<\/a><\/li><li><a href=\"#3_Avoid_Running_Too_Many_Concurrent_ImportsExports\"><span class=\"toc_number toc_depth_2\">5.3.<\/span> 3. Avoid Running Too Many Concurrent Imports\/Exports<\/a><\/li><li><a href=\"#4_Fix_Memory-Hungry_Code\"><span class=\"toc_number toc_depth_2\">5.4.<\/span> 4. Fix Memory-Hungry Code<\/a><\/li><\/ul><\/li><li><a href=\"#5_Verify_Disk_Work_Under_IO_and_IOPS_Limits\"><span class=\"toc_number toc_depth_1\">6.<\/span> 5. Verify Disk Work Under IO and IOPS Limits<\/a><ul><li><a href=\"#1_Schedule_Backups_Wisely\"><span class=\"toc_number toc_depth_2\">6.1.<\/span> 1. Schedule Backups Wisely<\/a><\/li><li><a href=\"#2_Control_Malware_and_Security_Scans\"><span class=\"toc_number toc_depth_2\">6.2.<\/span> 2. Control Malware and Security Scans<\/a><\/li><li><a href=\"#3_Optimize_Images_and_Media\"><span class=\"toc_number toc_depth_2\">6.3.<\/span> 3. Optimize Images and Media<\/a><\/li><li><a href=\"#4_Keep_Logs_and_Temporary_Files_Under_Control\"><span class=\"toc_number toc_depth_2\">6.4.<\/span> 4. Keep Logs and Temporary Files Under Control<\/a><\/li><\/ul><\/li><li><a href=\"#6_Reduce_Abusive_Work_Without_Blocking_Required_Traffic\"><span class=\"toc_number toc_depth_1\">7.<\/span> 6. Reduce Abusive Work Without Blocking Required Traffic<\/a><ul><li><a href=\"#1_Harden_Login_and_XML-RPC_Endpoints\"><span class=\"toc_number toc_depth_2\">7.1.<\/span> 1. Harden Login and XML-RPC Endpoints<\/a><\/li><li><a href=\"#2_Block_Bad_Bots_and_Aggressive_Crawlers\"><span class=\"toc_number toc_depth_2\">7.2.<\/span> 2. Block Bad Bots and Aggressive Crawlers<\/a><\/li><li><a href=\"#3_Keep_Software_Updated_and_Malware-Free\"><span class=\"toc_number toc_depth_2\">7.3.<\/span> 3. Keep Software Updated and Malware-Free<\/a><\/li><\/ul><\/li><li><a href=\"#7_Decide_Whether_Capacity_or_Control_Must_Change\"><span class=\"toc_number toc_depth_1\">8.<\/span> 7. Decide Whether Capacity or Control Must Change<\/a><ul><li><a href=\"#Evidence_Supporting_a_Capacity_Change\"><span class=\"toc_number toc_depth_2\">8.1.<\/span> Evidence Supporting a Capacity Change<\/a><\/li><li><a href=\"#Confirming_Your_DCHost_Plan_and_Upgrade_Options\"><span class=\"toc_number toc_depth_2\">8.2.<\/span> Confirming Your DCHost Plan and Upgrade Options<\/a><\/li><\/ul><\/li><li><a href=\"#8_Verify_the_Result_and_Keep_a_Change_Record\"><span class=\"toc_number toc_depth_1\">9.<\/span> 8. Verify the Result and Keep a Change Record<\/a><\/li><li><a href=\"#Judge_the_Fix_by_Completed_Work\"><span class=\"toc_number toc_depth_1\">10.<\/span> Judge the Fix by Completed Work<\/a><\/li><\/ul><\/div>\n<h2><span id=\"Identify_the_Environment_Before_Assigning_a_Cause\">Identify the Environment Before Assigning a Cause<\/span><\/h2>\n<p>CloudLinux LVE applies account-level resource controls. cPanel is the control-panel interface, not by itself the LVE enforcement layer. Verify the installed CloudLinux\/LVE version, web server, PHP handler and actual plan limits. Several sites or background jobs sharing an account can consume the same allocation; a single HTTP code does not identify which limit, application or upstream failed.<\/p>\n<p>Keep the brief definitions below beside the incident record. For the detailed units, average\/maximum fields and fault interpretation, use the <a href=\"https:\/\/www.dchost.com\/blog\/en\/cpanel-resource-graphs-units-fault-counters\/\">cPanel resource-graph reference<\/a>.<\/p>\n<h3><span id=\"CPU_Processor_Time\">CPU (Processor Time)<\/span><\/h3>\n<p><strong>What it is:<\/strong> Modern CloudLinux SPEED is relative to a single core: 100% corresponds to one core\u2019s processing capacity and 150% to one and a half. This is a limit, not an exclusively assigned physical core. A panel percentage normalized to your package allowance is a different display scale; check the limit and units rather than treating every \u201c100%\u201d as full-server CPU use.<\/p>\n<p><strong>At the limit:<\/strong> CPU throttling slows execution and may contribute to timeouts. In Apache\u2019s request-entry model, longer requests may also occupy EP slots longer and eventually cause a separate EP fault. CPU exhaustion is not itself a direct HTTP 508 rule; correlate the relevant counters and errors.<\/p>\n<p><strong>Investigate:<\/strong> Expensive application paths, cache misses, scheduled work, bot traffic, inefficient code or malware. A slow query or external API can keep a request waiting without consuming equivalent PHP CPU time; measure the actual bottleneck.<\/p>\n<h3><span id=\"RAM_Physical_Memory_Usage\">RAM (Physical Memory Usage)<\/span><\/h3>\n<p><strong>What it is:<\/strong> PMEM covers physical memory used by processes in the LVE, shared memory and, subject to the accounting settings, disk page cache. It is not the entire shared database server\u2019s RAM or the PHP memory_limit setting. PHP\u2019s script allocation limit is separate from aggregate physical-memory accounting and is not a preallocated amount per worker.<\/p>\n<p><strong>At the limit:<\/strong> CloudLinux first frees disk cache; if that is insufficient, it can kill some processes within the LVE and increment fPMEM, commonly resulting in 500\/503 failures. A high graph alone does not prove a kill. Page-cache inclusion in displayed statistics depends on kernel\/module versions and settings; ask which accounting applies.<\/p>\n<p><strong>Common causes:<\/strong> too many simultaneous PHP processes, memory-hungry plugins, big imports\/exports, or scripts that load everything into memory instead of streaming.<\/p>\n<h3><span id=\"IO_and_IOPS_Disk_InputOutput\">I\/O and IOPS (Disk Input\/Output)<\/span><\/h3>\n<p><strong>What it is:<\/strong> IO limits combined disk read\/write throughput, documented in KB\/s and often displayed in larger units. IOPS limits the number of read\/write operations per second. Neither is disk capacity or network bandwidth. CloudLinux\u2019s disk IO accounting excludes disk-cache accesses; confirm units before comparing values.<\/p>\n<p><strong>At the limit:<\/strong> IO throttles processes rather than killing them. At the IOPS limit, read\/write operations wait until the current second expires. Requests or backups may become slower and time out indirectly. Database accounting and restriction depend on MySQL Governor and the configured mode; do not assume every SQL operation appears as ordinary account disk IO.<\/p>\n<p><strong>Common causes:<\/strong> on-demand full backups, malware or antivirus scans, frequent log writes or large log-processing jobs, image upload and conversion, or plugin\/theme updates happening all at once.<\/p>\n<h3><span id=\"EP_Entry_Processes\">EP (Entry Processes)<\/span><\/h3>\n<p><strong>What it is:<\/strong> EP counts entries into LVE, not every process created inside it. With Apache mod_hostinglimits, dynamic CGI\/PHP request entry is a typical counted path; integrated SSH\/cron activity can count too. EP is not the number of visitors, all connections or PHP workers. LiteSpeed differs: in workgroup mode a single lsphp master can fork children without incrementing EP for every child or request.<\/p>\n<p><strong>At the limit:<\/strong> Under Apache mod_hostinglimits, inability to enter LVE at the EP limit can return 508. Do not assume excess visitors are automatically queued, or apply this accounting unchanged to LiteSpeed. PHP-FPM\/LSAPI worker and server connection limits are separate controls whose failures also need inspection.<\/p>\n<p><strong>Investigate:<\/strong> Concurrent uncached dynamic work, slow requests, AJAX and scheduled jobs in the actual handler configuration. Also inspect <strong>NPROC<\/strong>, the separate limit on processes and threads inside LVE. At NPROC, new processes cannot be created until capacity is available; Apache may return 500\/503. Low CPU does not rule out EP, NPROC or an external wait.<\/p>\n<p>Before changing plugins or configuration, make sure you have a restorable backup. Our <a href=\"https:\/\/www.dchost.com\/blog\/en\/cpanel-backup-restore-files-databases-email\/\">full cPanel backup and restore guide<\/a> is a related reference.<\/p>\n<h2><span id=\"1_Record_the_Failure_and_Correlate_the_Evidence\">1. Record the Failure and Correlate the Evidence<\/span><\/h2>\n<p>A larger plan may address a capacity shortfall, while an application change may reduce unnecessary work. The first decision needs evidence: record the failed route or job, time zone, duration and result, then compare the same window with available resource and fault data.<\/p>\n<h3><span id=\"Step_1_Open_the_Resource_Usage_Tool\">Step 1: Open the Resource Usage Tool<\/span><\/h3>\n<p>If your provider enables the CloudLinux Resource Usage client plugin in cPanel, open it to inspect the account. Names, available metrics and history depend on the installed integration; request missing detail from the provider. Typical views include:<\/p>\n<ul>\n<li>A dashboard describing recent limiting.<\/li>\n<li>Current\/history charts and tables showing the actual limits, usage and available fault counters.<\/li>\n<li>Selectable time ranges; compare the incident window with a longer baseline.<\/li>\n<li>Snapshots of processes and, where available, SQL\/HTTP activity. Collection may lag the fault and snapshots are not an exact replay of the failing request.<\/li>\n<\/ul>\n<p>Match time zones, units and sampling intervals to your application\/access logs. Compare usage against its own limit, not a universal 100% rule for every metric. Average charts can hide brief peaks; use available maxima, fault counters and user-visible outcomes together.<\/p>\n<h3><span id=\"Step_2_Match_Spikes_to_Events\">Step 2: Match Spikes to Events<\/span><\/h3>\n<p>Once you see when limits are being hit, try to map those times to actual events:<\/p>\n<ul>\n<li>Did you send a newsletter campaign linking to a blog post?<\/li>\n<li>Did you run an import\/export in WordPress or your shop system?<\/li>\n<li>Did you install or update a plugin\/theme?<\/li>\n<li>Did a developer deploy new code or change the database?<\/li>\n<\/ul>\n<p>Spikes that line up with your own actions give you a starting point for investigation. Spikes at odd hours may come from bots, crawlers, scheduled jobs or visitors in other time zones; timing alone does not establish a security issue.<\/p>\n<h3><span id=\"Step_3_Use_Access_Logs_and_Slow_Logs\">Step 3: Use Access Logs and Slow Logs<\/span><\/h3>\n<p>If you are comfortable with logs, check:<\/p>\n<ul>\n<li><strong>Raw access logs<\/strong> in cPanel or via FTP to see which URLs were hit most at the time of the spike.<\/li>\n<li><strong>PHP or application logs<\/strong> for errors or repeated warnings, and slow-query records if the application is configured to collect them.<\/li>\n<\/ul>\n<p>For WooCommerce and other dynamic sites, also review database slow logs if you have access (on a <a href=\"https:\/\/www.dchost.com\/vps\">VPS<\/a> or dedicated server, verify that your access level and database configuration allow this; on shared hosting, ask support what is available).<\/p>\n<h3><span id=\"Symptom_Evidence_and_Outcome_Check\">Symptom, Evidence and Outcome Check<\/span><\/h3>\n<table>\n<caption>Diagnostic decision table \u2014 not measured customer cases<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Symptom<\/th>\n<th scope=\"col\">Evidence to check<\/th>\n<th scope=\"col\">Verify after the change<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Slow response near a CPU limit<\/td>\n<td>Same-window SPEED limit, application CPU time and request duration<\/td>\n<td>Latency and CPU for equivalent completed work; separate EP faults<\/td>\n<\/tr>\n<tr>\n<td>HTTP 508<\/td>\n<td>Apache mod_hostinglimits and matching EP entry refusal; actual handler<\/td>\n<td>Affected requests complete, EP faults fall and private responses remain separate<\/td>\n<\/tr>\n<tr>\n<td>PHP memory error or 500\/503<\/td>\n<td>PHP memory_limit log, separate PMEM\/NPROC faults and process evidence<\/td>\n<td>The same job completes; peak memory and account faults are compared<\/td>\n<\/tr>\n<tr>\n<td>Slowdown during a backup<\/td>\n<td>IO\/IOPS, task start\/end times and overlapping work<\/td>\n<td>Required coverage, completion and isolated restore; foreground latency<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A symptom alone does not prove the listed cause. A quieter graph caused by skipped work is not evidence of a successful fix.<\/p>\n<h2><span id=\"2_Choose_a_Cause_to_Investigate\">2. Choose a Cause to Investigate<\/span><\/h2>\n<p>Here are common causes to investigate and signs that can help narrow down the problem.<\/p>\n<h3><span id=\"1_No_or_Ineffective_Caching\">1. No (or Ineffective) Caching<\/span><\/h3>\n<p>For a PHP-based site, a page request not served from a full-page cache may require PHP execution, database queries and template rendering. As concurrent traffic grows, that work can push CPU, RAM and EP usage toward their limits.<\/p>\n<p>Evidence to seek before attributing the problem to cache misses:<\/p>\n<ul>\n<li>Many requests receive identical public HTML but repeatedly execute dynamic code.<\/li>\n<li>Measured cache misses align with expensive application paths during peaks.<\/li>\n<li>Comparable anonymous test requests show lower backend work after a verified cache hit, while personalized requests remain correctly separate.<\/li>\n<\/ul>\n<h3><span id=\"2_Heavy_or_Poorly_Coded_Plugins_and_Themes\">2. Heavy or Poorly Coded Plugins and Themes<\/span><\/h3>\n<p>A component can add costly PHP work, queries or server-side external calls. Identify its actual contribution; the number of installed plugins does not establish which one causes the failure.<\/p>\n<p>Evidence to seek before attributing the problem to a component:<\/p>\n<ul>\n<li>Usage shot up right after installing or activating a specific plugin\/theme.<\/li>\n<li>Disabling that plugin in a staging or test copy reduces CPU\/EP usage under comparable request load.<\/li>\n<li>Developer tools or profiler plugins show slow hooks and long-running queries from one component.<\/li>\n<\/ul>\n<h3><span id=\"3_Bots_Crawlers_and_Brute-Force_Attacks\">3. Bots, Crawlers and Brute-Force Attacks<\/span><\/h3>\n<p>Automated requests to login, search or XML-RPC can create dynamic work. Some are legitimate. Evaluate route, timing, duration and outcomes before classifying the traffic.<\/p>\n<p>Signals to correlate, not proof of abuse on their own:<\/p>\n<ul>\n<li>Access logs show many requests from a few IPs, often to \/wp-login.php, \/xmlrpc.php or search\/result URLs.<\/li>\n<li>Spikes happen at random, including night hours when you expect low traffic.<\/li>\n<li>Security plugins report failed logins or blocked requests.<\/li>\n<\/ul>\n<h3><span id=\"4_Backup_Scan_or_Cron_Jobs_Running_at_Peak_Times\">4. Backup, Scan or Cron Jobs Running at Peak Times<\/span><\/h3>\n<p>Backups, scans, bulk email or reports may compete with foreground requests when their resource use overlaps. Measure the task and the affected operation; a scheduled start time alone does not prove a bottleneck.<\/p>\n<p>Evidence to compare with the task schedule:<\/p>\n<ul>\n<li>Spikes occur at the same time every day or week.<\/li>\n<li>During that time, disk I\/O and sometimes CPU increase sharply.<\/li>\n<li>You recently enabled backups or scans in a plugin without setting off-peak schedules.<\/li>\n<\/ul>\n<h3><span id=\"5_Growing_Traffic_on_an_Old_Plan\">5. Growing Traffic on an Old Plan<\/span><\/h3>\n<p>Necessary traffic and background work can grow beyond the current plan. Compare confirmed capacity limits with the required workload instead of assuming every peak means either a fault in the application or a need to upgrade.<\/p>\n<p>Signals to investigate alongside completed operations and errors:<\/p>\n<ul>\n<li>Spikes line up with campaigns, SEO wins or peak seasons.<\/li>\n<li>Even with caching and basic optimization, graphs stay near the limits during busy times.<\/li>\n<li>Your application is already quite optimized, but reports and analytics confirm large concurrent traffic.<\/li>\n<\/ul>\n<p>If you suspect this is the case, it is worth revisiting capacity planning. Our article on <a href=\"https:\/\/www.dchost.com\/blog\/en\/how-much-cpu-ram-and-bandwidth-does-a-new-website-need\/\">how much CPU, RAM and bandwidth a website really needs<\/a> can help you size your hosting for the next phase of growth.<\/p>\n<h2><span id=\"3_Reduce_the_Measured_CPU_Work\">3. Reduce the Measured CPU Work<\/span><\/h2>\n<p>Prioritize changes using measured CPU time and the affected user operation. CPU may or may not be the first limit reached. The following changes can help when they address your workload; compare before and after under equivalent request load and confirm the work still completes correctly.<\/p>\n<h3><span id=\"1_Enable_and_Tune_Full-Page_Caching\">1. Enable and Tune Full-Page Caching<\/span><\/h3>\n<p>A full-page cache hit can serve eligible HTML without regenerating it through PHP and database queries. Benefits depend on eligibility, cache location, hit rate and invalidation; private or personalized responses need correct isolation.<\/p>\n<ul>\n<li>For LiteSpeed page caching, confirm a compatible service with LSCache enabled or the appropriate QUIC.cloud service. Installing the WordPress plugin alone does not create a server cache.<\/li>\n<li>Cache only reviewed, identical public HTML. Exclude login, cart, checkout, account, personalized\/session responses and private API paths, including real localized routes; test cookies and authorization with separate sessions.<\/li>\n<li>Choose TTLs and purge rules from content-change requirements. Verify that updates invalidate affected pages and that a cache hit never serves another user\u2019s data.<\/li>\n<\/ul>\n<p>We have a step-by-step guide on <a href=\"https:\/\/www.dchost.com\/blog\/en\/speed-up-wordpress-with-litespeed-cache-on-shared-hosting\/\">speeding up WordPress with LiteSpeed Cache on shared hosting<\/a>; the same principles apply to reducing CPU, not just improving speed.<\/p>\n<h3><span id=\"2_Use_a_Compatible_Supported_PHP_Version\">2. Use a Compatible, Supported PHP Version<\/span><\/h3>\n<p>Choose a PHP branch with security support that your host and application support. A newer version may change performance, but benchmark representative routes rather than assuming every PHP 8.x release is supported or faster for this site.<\/p>\n<ul>\n<li>Use the PHP-version interface your provider enables, such as MultiPHP Manager or the relevant selector, and confirm which installed version\/handler serves the domain.<\/li>\n<li>Test compatibility and the required extensions in a restorable staging copy, including checkout, cron, imports and administrative functions.<\/li>\n<li>Prepare rollback and validate production behaviour after a planned change; PHP-FPM pool management and version selection are separate responsibilities.<\/li>\n<\/ul>\n<p>If the change reduces CPU time for the same completed work, it can relieve CPU pressure. Faster wall-clock completion may reduce concurrent occupancy under Apache\u2019s request-entry model; it does not prove lower peak memory or an identical EP effect with LiteSpeed.<\/p>\n<h3><span id=\"3_Remove_or_Replace_Heavy_Plugins_and_Themes\">3. Remove or Replace Heavy Plugins and Themes<\/span><\/h3>\n<p>Start with a plugin audit:<\/p>\n<ol>\n<li>Inventory active and inactive plugins and their data\/dependencies.<\/li>\n<li>Test removal or replacement in staging with a restorable backup; preserve required payment, authentication and security functions.<\/li>\n<li>Compare the suspected component under equivalent load and one change at a time. Plugin count alone is not a resource metric.<\/li>\n<\/ol>\n<p>Assess a theme by the work its active features perform. Compare query counts, CPU time and memory on representative routes; a theme category or feature count alone is not proof of waste.<\/p>\n<h3><span id=\"4_Optimize_Database_Queries\">4. Optimize Database Queries<\/span><\/h3>\n<p>A slow query can keep the application request waiting. Query CPU\/RAM belongs to the database execution path, whose attribution and throttling depend on the server and MySQL Governor configuration; it is not automatically PHP-account PMEM. Investigate actual plans, duration and returned rows for issues such as:<\/p>\n<ul>\n<li>Autoloaded options tables with unnecessary data (especially in WordPress).<\/li>\n<li>Large postmeta or logs tables (e.g. WooCommerce order logs, session tables).<\/li>\n<li>Search or listing pages running unindexed queries.<\/li>\n<\/ul>\n<p>Practical steps:<\/p>\n<ul>\n<li>Use application-supported expiry\/cleanup for sessions, transients and logs after checking dependencies and retention needs; avoid blind table deletion.<\/li>\n<li>Choose indexes from query plans and representative read\/write workloads, with rollback for schema changes.<\/li>\n<li>Limit unnecessary rows and columns in listings, search and filters while preserving correct application results.<\/li>\n<\/ul>\n<h3><span id=\"5_Offload_Heavy_Tasks_to_Cron_Jobs_at_Off-Peak_Times\">5. Offload Heavy Tasks to Cron Jobs at Off-Peak Times<\/span><\/h3>\n<p>Separate long-running work from interactive page loads where the application permits it. A background job still needs capacity, bounded concurrency and a completion deadline:<\/p>\n<ul>\n<li>Use bounded batches and controlled concurrency for background work; cron or CLI still consumes account resources and may be included in LVE entry accounting.<\/li>\n<li>Avoid overlapping executions and schedule according to task deadlines, not merely a preferred quiet hour.<\/li>\n<li>For WordPress, prove the replacement system scheduler actually runs due tasks before disabling page-triggered WP-Cron. Making it less frequent can delay required tasks.<\/li>\n<\/ul>\n<p>If you are new to cron on shared hosting, our guide on <a href=\"https:\/\/www.dchost.com\/blog\/en\/cpanel-directadmin-cron-backups-maintenance\/\">automating backups, reports and maintenance with cron jobs in cPanel and DirectAdmin<\/a> walks through the basics using real examples.<\/p>\n<h2><span id=\"4_Separate_Memory_Failures_from_Entry_and_Process_Limits\">4. Separate Memory Failures from Entry and Process Limits<\/span><\/h2>\n<p>Memory, entry count and process\/thread count are separate measurements. Diagnose PMEM, EP and NPROC independently, along with PHP\u2019s allocation limits and handler worker configuration. A quiet CPU graph does not mean these other limits are healthy.<\/p>\n<h3><span id=\"1_Make_Requests_Finish_Faster\">1. Make Requests Finish Faster<\/span><\/h3>\n<p>Reducing request duration can reduce concurrent occupancy under Apache\u2019s EP model, but it does not necessarily lower peak memory. LiteSpeed EP follows a different process-entry model. Measure completed work, memory and relevant counters while improving:<\/p>\n<ul>\n<li>Full-page caching and object caching (where available).<\/li>\n<li>Reducing external API calls during page loads.<\/li>\n<li>Optimizing database queries and avoiding unnecessary joins or nested loops.<\/li>\n<\/ul>\n<h3><span id=\"2_Reduce_Background_AJAX_and_Heartbeat_Requests\">2. Reduce Background AJAX and Heartbeat Requests<\/span><\/h3>\n<p>Heartbeat and other AJAX can trigger PHP work even when the page appears idle. Their effect on account resources and EP depends on the handler and actual callbacks. Inventory the functions using them before changing their frequency.<\/p>\n<ul>\n<li>Measure which background endpoint is expensive and how often it runs.<\/li>\n<li>Reduce unnecessary polling only after testing editor saves, locks, session-related behaviour and plugin functions that depend on it.<\/li>\n<li>Do not disable Heartbeat globally to improve a graph while breaking required features; tune the relevant context and verify its outcomes.<\/li>\n<\/ul>\n<h3><span id=\"3_Avoid_Running_Too_Many_Concurrent_ImportsExports\">3. Avoid Running Too Many Concurrent Imports\/Exports<\/span><\/h3>\n<p>Bulk imports, exports and migrations can open a large number of concurrent PHP processes and database connections if they are not designed to batch work properly.<\/p>\n<ul>\n<li>Use bounded batches and limited concurrency, with progress and retry handling.<\/li>\n<li>Schedule to avoid measured peaks while meeting business deadlines.<\/li>\n<li>If the plan permits CLI tools, choose them for appropriate job control; CLI does not guarantee lower resource use or exemption from LVE limits.<\/li>\n<\/ul>\n<h3><span id=\"4_Fix_Memory-Hungry_Code\">4. Fix Memory-Hungry Code<\/span><\/h3>\n<p>A script that loads a large dataset may use substantial memory. Profile the actual job and consider these changes where they preserve its results:<\/p>\n<ul>\n<li>Stream large files instead of reading them all at once.<\/li>\n<li>Use pagination for large queries instead of building giant arrays in PHP.<\/li>\n<li>Unset variables and arrays when they are no longer needed.<\/li>\n<\/ul>\n<p>Measure the script\u2019s peak allocation and LVE PMEM before and after the same job. Streaming and batching can help, but there is no guaranteed percentage saving. Increasing memory_limit does not increase the account\u2019s physical-memory allowance, and it is not a strict operating-system RSS cap.<\/p>\n<h2><span id=\"5_Verify_Disk_Work_Under_IO_and_IOPS_Limits\">5. Verify Disk Work Under IO and IOPS Limits<\/span><\/h2>\n<p>Compare disk-rate and operation-rate data with the actual backup, scan, upload or request window. Storage capacity and account IO throttling are different constraints; a lower file count alone is not proof of faster requests.<\/p>\n<h3><span id=\"1_Schedule_Backups_Wisely\">1. Schedule Backups Wisely<\/span><\/h3>\n<p>Backups are non-negotiable, but <em>when<\/em> and <em>how<\/em> you run them matters.<\/p>\n<ul>\n<li>Define acceptable data loss, restore time, retention and required coverage before adjusting schedules.<\/li>\n<li>Reduce overlapping or redundant work; use incremental backups when supported and verified by restore testing.<\/li>\n<li>Confirm provider backups rather than assuming coverage. Keep an appropriate independent copy and test restoration in isolation before reducing an existing safeguard.<\/li>\n<\/ul>\n<p>An offsite destination separates the final copy and can reduce retained local storage, but the job may still read every source file, compress data and create temporary archives locally. Measure those costs and available space; external storage does not automatically remove local IO or CPU load.<\/p>\n<h3><span id=\"2_Control_Malware_and_Security_Scans\">2. Control Malware and Security Scans<\/span><\/h3>\n<p>Inspect the duration, frequency and IO cost of security scans, then adjust only what the required detection coverage allows:<\/p>\n<ul>\n<li>Schedule scans to avoid unnecessary overlap while maintaining the required detection coverage.<\/li>\n<li>Use supported incremental\/differential checks where appropriate; verify their coverage instead of replacing all full scans blindly.<\/li>\n<li>Manage quarantine and scan logs under the incident\/retention policy; preserve evidence and required recovery material.<\/li>\n<\/ul>\n<h3><span id=\"3_Optimize_Images_and_Media\">3. Optimize Images and Media<\/span><\/h3>\n<p>Large images not only affect front-end performance but also generate extra I\/O during uploads, conversions and backups.<\/p>\n<ul>\n<li>Resize source images appropriately and measure conversion work; recurring re-optimization can itself create load.<\/li>\n<li>Use suitable modern image formats with actual client\/application support and compare output size and quality.<\/li>\n<li>Remove media or archives only after checking references, retention and restore requirements. An \u201cunused\u201d label is not proof a file is dispensable.<\/li>\n<\/ul>\n<h3><span id=\"4_Keep_Logs_and_Temporary_Files_Under_Control\">4. Keep Logs and Temporary Files Under Control<\/span><\/h3>\n<p>Large log files and temp directories can create extra disk work.<\/p>\n<ul>\n<li>Limit unnecessary verbose output at its source; retain required security\/audit events and exclude secrets.<\/li>\n<li>Apply supported rotation and expiry, considering active files, legal\/incident holds and backup copies.<\/li>\n<li>Compression saves storage but consumes resources and is not deletion. Smaller directories alone do not prove a lower IO rate.<\/li>\n<\/ul>\n<h2><span id=\"6_Reduce_Abusive_Work_Without_Blocking_Required_Traffic\">6. Reduce Abusive Work Without Blocking Required Traffic<\/span><\/h2>\n<p>Requests outside browser analytics can still consume account resources. Correlate access logs and application work with the incident, then check that a filter reduces the relevant origin work and preserves legitimate use.<\/p>\n<h3><span id=\"1_Harden_Login_and_XML-RPC_Endpoints\">1. Harden Login and XML-RPC Endpoints<\/span><\/h3>\n<p>For WordPress and similar systems:<\/p>\n<ul>\n<li>Apply appropriate rate limits and checks at login\/XML-RPC paths, preferably before expensive PHP work; test legitimate shared-IP users and required integrations.<\/li>\n<li>Use strong passwords and supported MFA to protect accounts. These do not by themselves reduce the volume of attempted requests.<\/li>\n<li>A changed login URL may reduce common scanning noise but is not access control. Keep supported software, account protection and a recovery route.<\/li>\n<\/ul>\n<p>Our checklist for <a href=\"https:\/\/www.dchost.com\/blog\/en\/cpanel-security-hardening-checklist-to-stop-brute-force-and-malware\/\">cPanel security hardening<\/a> includes practical server-side settings that also help reduce resource abuse.<\/p>\n<h3><span id=\"2_Block_Bad_Bots_and_Aggressive_Crawlers\">2. Block Bad Bots and Aggressive Crawlers<\/span><\/h3>\n<p>Many bots ignore robots.txt and crawl dynamic pages aggressively. To mitigate this:<\/p>\n<ul>\n<li>Validate abusive patterns using timing, routes and outcomes; User-Agent can be forged and an IP can represent several users.<\/li>\n<li>Rate-limit costly endpoints carefully and test legitimate API clients, payment callbacks and known crawlers.<\/li>\n<li>A suitable edge\/CDN\/WAF control can reduce requests reaching the origin. A PHP security plugin runs later and uses resources itself; neither implies complete DDoS protection.<\/li>\n<\/ul>\n<h3><span id=\"3_Keep_Software_Updated_and_Malware-Free\">3. Keep Software Updated and Malware-Free<\/span><\/h3>\n<p>Compromised sites often run hidden backdoors, mailers or crypto-miners that chew through CPU and I\/O.<\/p>\n<ul>\n<li>Keep core CMS, themes and plugins up to date.<\/li>\n<li>Remove abandoned extensions that are no longer maintained.<\/li>\n<li>Scan regularly for malware and clean any infection promptly.<\/li>\n<\/ul>\n<p>If you run WordPress and feel stuck in a loop of recurring infections, our article on <a href=\"https:\/\/www.dchost.com\/blog\/en\/wordpress-keeps-getting-hacked\/\">what to do if WordPress keeps getting hacked<\/a> outlines a practical cleanup and hardening process that also stabilizes resource usage.<\/p>\n<h2><span id=\"7_Decide_Whether_Capacity_or_Control_Must_Change\">7. Decide Whether Capacity or Control Must Change<\/span><\/h2>\n<p>Capacity planning depends on necessary work, measured failures and operating requirements. Optimization and additional capacity can proceed together; do not postpone relief for failing critical operations while waiting to finish every tuning idea.<\/p>\n<h3><span id=\"Evidence_Supporting_a_Capacity_Change\">Evidence Supporting a Capacity Change<\/span><\/h3>\n<ul>\n<li>You have implemented caching, cleaned up plugins, optimized images and scheduled backups off-peak, yet still hit limits during normal business hours.<\/li>\n<li>Traffic and orders continue to increase (for example on an e\u2011commerce site) and peaks are predictable rather than random.<\/li>\n<li>You need more control over PHP, database configuration or background workers than shared hosting permits.<\/li>\n<\/ul>\n<p>Compare the actual CPU allocation, memory, IO\/IOPS, worker\/process limits and management duties of alternative plans. A VPS label does not guarantee exclusive CPU or unlimited storage performance; a <a href=\"https:\/\/www.dchost.com\/dedicated-server\">dedicated server<\/a> also needs correct application sizing and operation. Choose the option that addresses the confirmed bottleneck and required control.<\/p>\n<h3><span id=\"Confirming_Your_DCHost_Plan_and_Upgrade_Options\">Confirming Your DCHost Plan and Upgrade Options<\/span><\/h3>\n<p>Prepare a concise evidence packet for your provider and developer:<\/p>\n<ul>\n<li>Incident times and time zones, affected routes, status codes, workload and relevant usage\/fault records.<\/li>\n<li>Installed web server\/PHP handler, confirmed plan limits and before\/after results for tested changes.<\/li>\n<li>Required capacity and control, backup\/restore needs and proposed migration\/rollback steps. Confirm available analysis, management and migration services and their scope; do not assume a guaranteed interruption-free move.<\/li>\n<\/ul>\n<p>Revisit capacity after meaningful workload or application changes. The <a href=\"https:\/\/www.dchost.com\/blog\/en\/estimate-traffic-and-bandwidth-for-shared-hosting-and-vps\/\">traffic and bandwidth calculation guide<\/a> covers the separate network-volume and rate questions; those estimates do not replace CPU, memory or disk evidence.<\/p>\n<h2><span id=\"8_Verify_the_Result_and_Keep_a_Change_Record\">8. Verify the Result and Keep a Change Record<\/span><\/h2>\n<p>Save the changed setting, before\/after workload, completed operation count, duration, errors and rollback decision. Redact credentials and customer data from examples shared with support. Use this sequence to check whether the intended operation improved:<\/p>\n<ol>\n<li><strong>Identify the environment:<\/strong> Verify CloudLinux, web server\/handler and actual account limits; distinguish per-core CPU from normalized percentages.<\/li>\n<li><strong>Correlate the failure:<\/strong> Match usage\/faults, timestamps and application logs; distinguish CPU\/IO throttling, Apache EP rejection and PMEM\/NPROC failures.<\/li>\n<li><strong>Measure application work:<\/strong> Test expensive plugins, queries, API calls, memory and scheduled tasks in staging under comparable load.<\/li>\n<li><strong>Validate caching:<\/strong> Confirm public HTML hits, correct invalidation and private\/session separation.<\/li>\n<li><strong>Use supported software:<\/strong> Check PHP\/application compatibility and required functions before production changes.<\/li>\n<li><strong>Preserve backups and security:<\/strong> Reduce task overlap while retaining necessary recovery and detection coverage.<\/li>\n<li><strong>Re-measure:<\/strong> Compare completed operations, latency, errors and resource metrics across relevant peaks and scheduled jobs.<\/li>\n<li><strong>Plan capacity:<\/strong> If necessary work still exceeds limits or control is insufficient, compare concrete plan allocations and migration responsibilities.<\/li>\n<\/ol>\n<p>Keep required recovery coverage during troubleshooting. The <a href=\"https:\/\/www.dchost.com\/blog\/en\/3-2-1-backups-cpanel-plesk-vps\/\">3-2-1 backup guide for cPanel, Plesk and VPS<\/a> provides a related planning reference; a lower IO graph obtained by silently losing backup coverage is not a successful result.<\/p>\n<h2><span id=\"Judge_the_Fix_by_Completed_Work\">Judge the Fix by Completed Work<\/span><\/h2>\n<p>A diagnosis is useful when the suspected cause, the chosen change and the result can be traced to the same required operation. Repeat the comparison across the relevant busy period and scheduled jobs, keeping the observation interval and environment clear.<\/p>\n<p>Choose changes that address the measured bottleneck and verify both resource use and successful user operations. Preserve cache isolation, scheduled work, backup recovery and security coverage. If more capacity or control is needed, confirm the actual DCHost plan options and responsibilities using the evidence collected; no generic upgrade or plugin can guarantee the error never returns.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Separate entry refusals, memory failures and throttling. Connect the evidence to a targeted cache, PHP, task or capacity change and verify the actual user outcome.<\/p>\n","protected":false},"author":1,"featured_media":11181,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[184],"tags":[],"class_list":["post-2938","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/posts\/2938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/comments?post=2938"}],"version-history":[{"count":7,"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/posts\/2938\/revisions"}],"predecessor-version":[{"id":11183,"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/posts\/2938\/revisions\/11183"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/media\/11181"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/media?parent=2938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/categories?post=2938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/en\/wp-json\/wp\/v2\/tags?post=2938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}