Hi, I am setting up a production deployment of Apache Guacamole and am seeking guidance on optimizing memory allocation, particularly concerning the guacd component, for high concurrent user loads.
*Our Production Environment:* We are provisioning two Azure Standard E8as v5 virtual machines, each with: - *8 vCPUs* - *64 GiB of RAM* *Our Goal:* Each of these servers needs to reliably support *1000 concurrent RDP sessions at peak time, traffic will be less after hours.* *Observed guacd Memory Behavior (Critical Concern):* During our testing on similar server specifications, we've observed that guacd appears to operate in a multi-process mode, where each active Guacamole session (specifically RDP) seems to correspond to a separate guacd child process. Example: [image: image.png] >From btop monitoring, we've seen individual guacd child processes consuming between *70MB and 120MB of RAM per session*. *The Challenge:* If this per-process memory consumption scales linearly, then 1000 concurrent RDP sessions would require guacd alone to consume approximately *70 GiB to 120 GiB of RAM* (1000×70MB=70 GiB to 1000×120MB=120 GiB). This projected guacd memory demand significantly exceeds the total 64 GiB of RAM available on each of our target production servers. This raises a major concern about potential memory exhaustion, heavy swapping, and instability under full load, leaving little to no memory for the Tomcat application server, the operating system, Nginx (our reverse proxy), and other essential system processes. *Our Current Tomcat Memory Allocation (Planned):* We had initially planned to allocate a significant portion of memory to Tomcat for high concurrency, with settings like: CATALINA_OPTS='-Xms16384M -Xmx32768M -server -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError' However, this 32 GiB maximum for Tomcat becomes untenable if guacd requires 70 GiB+ on the same 64 GiB server. *Questions for Guacamole Support:* 1. *guacd Scaling Confirmation:* Can you confirm if guacd is indeed designed to fork a separate process for each RDP session, and if the observed per-process memory consumption (70-120MB) is typical for active RDP sessions? 2. *Memory Sizing Recommendations:* What are your official memory sizing recommendations for guacd per active RDP session when planning for high concurrency (e.g., 1000+ sessions)? 3. *guacd Optimization:* Are there any recommended guacd configuration options or best practices to optimize its memory footprint for high concurrent RDP remote app sessions, particularly if there are ways to enable a more "threaded" or shared-memory model rather than a strict per-process model? 4. *Architectural Guidance:* Given our target of 1000 concurrent RDP sessions and the observed guacd behavior, what is your recommended architectural approach for these servers? Should we: - Increase the RAM on our servers significantly (e.g., to 128 GiB or 256 GiB)? - Plan for a much larger number of smaller 64 GiB servers, each handling a reduced number of concurrent sessions (e.g., 200-300 sessions per server)? - Would it be necessary to provide a large chunk of memory for tomcat ? We are keen to ensure a stable and high-performing Guacamole environment for our users. Any insights or official documentation links regarding guacd's memory scaling for large deployments would be greatly appreciated. Thank you for your time Regards Gihan