A slow application may need a larger VPS, but it may also be waiting on a database query, a busy worker or an external service. Find where the time goes before paying for more resources. Otherwise, you can move the same problem to a more expensive server.
Use the checks below to decide whether to tune the application, resize the VPS, separate services or change providers. Start with measurements taken while the slowdown is happening.
Compare a normal period with a slow one
Pick a period that captures the problem: a traffic peak, import, deployment, report or scheduled job. Record timestamps and the time zone so you can line up the application logs with server and provider metrics.
For both the normal and slow periods, collect:
- Request rate, concurrent users, job volume and queue depth.
- Application response times and error rates.
- CPU usage, load and steal time, where available.
- Available memory, process memory, swap activity and out-of-memory events.
- Disk latency, throughput, IOPS, queue depth and free space.
- Database query times, locks, connections and cache behaviour.
- Network latency, packet loss, DNS lookup time and transfer rate.
- Response times and failures from external services.
Keep the workload comparable when testing another server. Different data, cache state, software or concurrency can change the result as much as the infrastructure does.
Work through the likely bottlenecks
1. CPU usage and steal time
Look for sustained CPU saturation at the same time as slow requests. A brief spike during a build or scheduled job may be expected; a server that stays busy while throughput stalls needs closer investigation.
Check whether the application can use more cores or is limited by one busy thread. Optimisation, faster individual cores and more parallel capacity solve different problems.
If the platform exposes steal time, record whether it stays elevated while the guest has work waiting to run. Repeat the measurement and give the provider timestamps. Steal time can support a contention investigation, but it does not establish the cause by itself.
2. Memory pressure and restarts
Average RAM usage can hide short peaks. Check process memory, available memory, swap-in and swap-out activity, kernel out-of-memory events and unexpected restarts during the slowdown.
Look for leaks, oversized caches, duplicate services or too many workers. If the workload still runs short of memory after those corrections, use its measured peak to choose a larger allocation with room to grow.
3. Storage latency and free space
A disk can have plenty of free space and still struggle with random reads or write bursts. Compare latency, IOPS, throughput, queue depth and I/O wait while the application is slow. Check whether a backup, import, log rotation or database maintenance job runs at the same time.
Check inode usage as well as disk capacity. A nearly full filesystem can prevent a database, package manager or application from creating the files it needs, even when CPU and memory look healthy.
4. Database queries and locks
Use slow-query logs, lock reports and execution plans to find expensive database work. Check indexes, transaction duration, connection pooling, cache sizing and maintenance jobs.
More memory may help a database keep frequently used data in cache. It will not fix a missing index, an unbounded query or a long-running transaction that blocks other requests.
5. Workers and queues
Measure active and waiting web workers, background workers, queue depth, oldest-job age, job duration, timeouts and retries. Too few workers can leave CPU idle while requests wait. Too many can exhaust memory or database connections.
Tune concurrency against those limits. Give long background jobs a separate queue or worker pool if they delay interactive requests.
6. Network paths
Test from the locations and networks where users report trouble. Compare latency, packet loss, route changes, DNS lookup time and transfer rate during normal and slow periods.
Repeat from another network before blaming the server. A local Wi-Fi problem or one upstream route can affect a user without affecting the VPS itself.
7. External services
Separate local processing time from calls to APIs, object storage, identity providers, payment services and other dependencies. Record their timeouts and retries. Waiting on another service can dominate a request even when the VPS has spare capacity.
Use bounded timeouts, appropriate retries and caching where the data allows it. Move slow work to a background queue when the user does not need its result immediately, and define what the application should do when a dependency fails.
8. Traffic and concurrency
Track requests per second, active connections, cache hits, transfer volume and scheduled work together. Monthly visits alone cannot tell you how much capacity a busy checkout, import or API endpoint needs.
Reproduce the peak in a controlled load test with a stop condition. Use an isolated environment where possible; agree safe limits before testing production. Compare throughput and response time with server, database and queue metrics to find the first part of the system that consistently slows down.
Choose a change that addresses the cause
| Change | Evidence to look for | Next step |
|---|---|---|
| Tune the application | Slow queries, locks, leaks or worker limits while server capacity remains available | Correct the fault and repeat the test |
| Resize the VPS | A resource remains saturated after application and configuration fixes | Increase the constrained resource and measure again |
| Separate services | Components compete, or one server cannot meet the required availability or scaling needs | Define service boundaries, health checks and recovery |
| Change providers | Persistent contention, network faults, capacity limits or service terms no longer meet requirements | Test an equivalent service and a migration rollback |
You may need more than one change. Fixing an expensive query and then adding RAM for the remaining peak is reasonable. Keep the measurements for each step so you know what helped.
Compare the full cost of an equivalent service
Write down your requirements before comparing plans: CPU characteristics, peak RAM, storage capacity and latency, location, transfer, operating system, IP addresses and access. Include backups, snapshots, recovery work, support scope, billing terms and usage limits.
The hidden cloud-hosting cost guide covers costs such as transfer, backups, idle resources and engineering time. Use the VPS sizing recommendation process to turn your measurements into a resource allocation.
Compare Virtarix with your requirements
As a starting point, Virtarix Cloud VPS M costs $11.40 per month and includes 6 CPU cores, 16 GB RAM, 100 GB NVMe storage, full root access and IPv4 + IPv6. Bandwidth is unlimited subject to fair use, acceptable-use requirements, network integrity and service limits. Confirm the current checkout price and test the plan against your workload.
Virtarix publishes an uptime SLA of 99.99% and states that its team has 10+ years of combined hosting experience. Assess the published SLA alongside your own application's availability and recovery requirements.
Each VPS/VDS includes one snapshot. Keep independent copies of important data and test how you will restore them. On this self-managed service, your team handles the operating system, applications, access controls, updates, monitoring and migration. Include that work when comparing costs and support.
Prepare the migration and rollback
Copying files is only part of a migration. Before changing servers:
- Inventory code, databases, files, scheduled jobs, workers, DNS, certificates, secrets, firewall rules, integrations and external allowlists.
- Make independent copies and test a restore on an isolated destination.
- Configure the destination's operating system, software, access controls, monitoring and recovery process.
- Run functional and load tests with the workload that justified the move.
- Set a cutover window, reduce DNS TTL where appropriate, plan the final data sync and assign an owner to each step.
- Define rollback triggers, such as increased errors, missing data, failed jobs or unacceptable latency. Plan how to handle writes received after cutover so a rollback does not lose them.
- Keep the source available until data, jobs, DNS, monitoring and recovery checks pass on the destination.
Repeat the original measurements
After tuning, resizing or migrating, repeat the normal and peak-period tests. Compare response times, throughput, errors, resource pressure, queues and cost with the original results. Keep watching through the next real peak: a successful quiet-period test does not establish that the recurring slowdown is resolved.
Ready to compare VPS options?
Review Virtarix VPS sizes and resources against the requirements you identified in this guide.
VPS S
For small sites, dev servers and Docker
- ✓ 3 cores
- ✓ 6 GB
- ✓ 50 GB NVMe
- ✓ Unlimited
VPS M
For growing apps, websites and staging
- ✓ 6 cores
- ✓ 16 GB
- ✓ 100 GB NVMe
- ✓ Unlimited