Fixed
Details
Assignee
UnassignedUnassignedReporter
Brad WoodBrad WoodPriority
NewLabels
Fix versions
New Issue warning screen
Before you create a new Issue, please post to the mailing list first https://dev.lucee.org
Once the issue has been verified, one of the Lucee team will ask you to file an issue
Details
Details
Assignee
Unassigned
UnassignedReporter
Brad Wood
Brad WoodPriority
Labels
Fix versions
New Issue warning screen
Before you create a new Issue, please post to the mailing list first https://dev.lucee.org
Once the issue has been verified, one of the Lucee team will ask you to file an issue
Created 19 February 2021 at 21:16
Updated 13 August 2022 at 08:24
Resolved 12 April 2021 at 10:16
Now that I've added Lucee to the Techempower language benchmarks, I'm performance tuning the tests-- some of which just hit a hello world page with 512 threads to see how many requests the server can process a second.
I put in a hackaround disk lookup cache to temporarily remove the disk overhead I logged in tickets
https://luceeserver.atlassian.net/browse/LDEV-3288
and
https://luceeserver.atlassian.net/browse/LDEV-3287
This revealed a new bottleneck in Lucee which is shown in the stack trace below. Every request coming into Lucee runs pageContext.initApplicationContext() which employs a KeyLock which single threads this code.
I'm unclear why this needs to be locked, but I would expect that two threads should be able to run at the same time without colliding here so long as the Application context is already created. The Application.cfc listener itself is re-created for each thread, so I'm not sure why it would need locking either. It's worth noting Adobe ColdFusion is outperforming Lucee in these simple tests when it comes to raw request per second throughput. Adobe CF has no locking that I can see of this nature.
Look at finding a way to remove this locking so one request does not need to wait on another request-- especially if nothing is being changed.