ProGet
How to Prevent Server Overload in ProGet
A single-server ProGet instance, especially in organizations with sustained, high-volume traffic can become overloaded —particularly when many users are all making concurrent calls to it. Client tools like NuGet and npm can make thousands of simultaneous requests—each one needing validation, compliance checks and often forwarding through connectors. At this point it’s not just heavy traffic; it’s practically a self-inflicted DDoS attack.
For smaller teams, a single-server setup works fine with the right tweaks. However, high traffic, especially from 50 or more users on a single-server ProGet instance, can result in issues like HTTP request timeouts, unhandled exceptions, and periods of service unavailability.
For these larger teams, Load balancing is becomes important feature of ProGet Enterprise Editions for maintaining the reliability of your ProGet instances and preventing instances from becoming overwhelmed.
In this article, we’ll explore how to recognize when your ProGet server is overloaded, how to optimize a single-server instance to handle more load, and when load balancing makes sense for bigger deployments. We’ll also cover how to set it up in ProGet Enterprise Edition if needed.
How Can I Tell if My Server is Overloaded?
A common cause of single server overload in larger deployments is high concurrent requests, which often hit the system like sudden traffic surges. These typically come from CI/CD pipelines, developer workstations, automated tools, or external consumers relying on less efficient APIs (like NuGet v2), hammering the server with thousands of requests all at once.
Whether it’s intensive build processes, indexing tasks, or just a busy team, these spikes in activity can overwhelm a single server. Based on user feedback, overload issues commonly arise when you have 50 or more users on a single-server instance, leading to slowness or timeouts.
Symptoms of Overload in ProGet
When a single server becomes overloaded, one of the first things you’ll notice is slowness. Package downloads, indexing, and queries will start taking longer than usual, experiencing delays of several seconds instead of just milliseconds. These are a good indicator that the system is struggling to handle requests efficiently.
Error messages are another common sign of overload. Look out for System.OperationCanceledException in your logs with the message “The operation was canceled”. This suggests that requests are being forcibly terminated due to excessive load or timeouts. Similarly, a System.InvalidOperationException stating “Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool” tells you that all available database connections are in use, preventing further queries from being processed.
In more severe cases, users may encounter HTTP 503 (Service Unavailable) errors. This typically happens when IIS or the ProGet service is unable to handle additional incoming requests.
Optimizing Single-Server ProGet Instances
For small teams, optimizing a single-server instance is usually enough to keep things running smoothly. You can stretch the performance of a single-server ProGet instance with these adjustments:
- Increase Resources: Upgrade from, say, 4GB RAM/2 CPUs to 8GB/4 CPUs to better handle demand.
- Adjust HTTPS Settings: Go to “Administration” > “HTTPS” > “Edit” set increase the connection limit (e.g., start at 50) or toggle as needed to handle more concurrent requests.
- Use Nginx Rate Limiting: Set up Nginx to control how quickly requests are handled, helping to manage sudden surges in traffic.
- Reduce Parallel Restores: Lower the number of parallel package restores in client tools like NuGet to lessen the load.
- Simplify or Remove Connectors: This will reduce the number of requests that need to be forwarded.
However, with extremely high traffic—say, 50+ users hitting the server at once—no amount of CPU or RAM will fully resolve the issue. The bottleneck often shifts to network traffic, limited by a single network card’s throughput. That’s when load balancing becomes necessary.
When Load Balancing Makes Sense
For larger teams with 50+ users, Load balancing in ProGet Enterprise Edition can prevent overload by spreading requests across multiple servers. It’s designed to handle sudden spikes and heavy activity, keeping performance steady as your organization grows.
Load balancing offers several key advantages that help maintain reliability in servers running ProGet:
🚀 Faster Response Times: Evenly distributing the workload prevents CPU and memory exhaustion, keeping package retrieval, indexing, and queries responsive.
🚀 Reliability: By automatically redirecting traffic if one server goes down, load balancing ensures high availability and prevents overloads during peak usage. Even with 50 or more users, performance stays stable.
🚀 Scalability: Load balancing makes it easier to add more servers as your organization grows, and avoid the risk of performance degradation that can happen when scaling.
Even on stable, single-server instances with no performance issues, load balancing has its advantages.
- It helps avoid single points of failure, which in turn will minimize any potential downtime.
- Spreading the system load to prevent server overload lowers the risk of hardware failures and performance issues, ensuring smoother scaling and better preparation for future traffic growth.
For larger organizations heavily relying on ProGet, implementing load balancing is more than a convenience — it’s a necessity.
Setting Up Load Balancing in ProGet
Enabling load balancing in ProGet requires an Enterprise License. Reaching the point where load balancing is needed typically indicates a significant reliance on ProGet for development workflows.
For organizations that see 50 or more users on a single-server ProGet instance at any given time, investing in the Enterprise Edition is necessary to keep operations running smoothly. Beyond simply distributing traffic, it provides features like high availability that align with the scaling needs of a growing organization.
Prerequisites for Load Balancing
Before setting up load balancing in ProGet, make sure you have the following components in place:
- Load Balancer: Can be software-based (e.g., HAProxy, Nginx) or appliance-based (e.g., F5, Citrix).
- Shared Storage: A centralized storage system accessible by all servers (e.g., SAMBA, NAS).
- Shared Database: A central SQL Server to store and manage data.
- Encryption Key: The same key must be used across all servers for secure communication.
Setting up Load Balancing
- Install ProGet on all servers, ensuring they are connected to the shared database.
- Configure Shared Storage by navigating to Administration > Advanced Settings and setting the Storage.PackagesRootPath to allow file sharing between servers.

- Enable High Availability by navigating to Administration > Cluster Overview and turning on Automatic Failover. You can also navigate to the Advanced tab to set additional values for your server cluster.

After saving configuration, restart the ProGet service on each of the nodes for the change to take effect.
Once you have Load Balancing set up, you should start to see smoother performance with fewer slowdowns, fewer error messages, and more consistent uptime, even during high-traffic periods.
Prevent Server Overload in ProGet with Load Balancing
Single-server ProGet instance in larger organizations can become overwhelmed under heavy traffic, leading to slow performance, error messages, and even downtime. For smaller organizations of 50 or fewer users, optimization can keep things running smoothly. But as concurrent users climb past 50, unchecked overload can slow development and productivity.
Load balancing in ProGet Enterprise Edition solves this by distributing traffic evenly across multiple servers, preventing overload and ensuring high availability. This will result in the faster response times, improved scalability, and minimal downtime needed for scaling organizations.
If your not already on an Enterprise License you can learn more about upgrading to ProGet Enterprise Edition or check out Inedo’s Load Balancing documentation for more information about getting it set up on your ProGet server.