-
-
Notifications
You must be signed in to change notification settings - Fork 281
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: thread autoscaling #1266
base: main
Are you sure you want to change the base?
feat: thread autoscaling #1266
Conversation
# Conflicts: # frankenphp.c # frankenphp.go # php_thread.go # worker.go
# Conflicts: # frankenphp.go
Alright I think this is ready to merge. Not sure why watcher installation is failing right now in asan and msan |
@dunglas I'll merge this branch if that's ok. It looks like the newest watcher version needs Also, not sure what's up with the sudden false positives in the markdown linter. |
@AlliBalliBaba Feel free to tell me I am wrong as I am just passing by and skim reading. But isn't the linter fail a true fail with a hint of misconfig, ithe GHA is linting |
@furan917 Oh you are right, I didn't realize we had RU docs. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great work!! I made a bunch of comments, but this looks very close to be mergeable to me.
Alright, the debug state is now a struct and the endpoint is marked as 'experimental' and returns a JSON. Additionally, I added support for a nested php.ini configuration like this, since I think it's a very convenient feature
|
I originally wanted to just create a PR that allows adding threads via the admin API, but after letting threads scale automatically, that PR kind of didn't make sense anymore by itself.
So here is what this PR does:
It adds 4 Caddy admin endpoints
Additionally, the PR also introduces a new directive in the config:
max_threads
.If it's bigger than
num_threads
, worker and regular threads will attempt to autoscale after a request on a few different conditions:This is all still a WIP. I'm not yet sure if
max_threads
is the best way to configure autoscaling or if it's even necessary to have the PUT/DELETE endpoints. Maybe it would also make sense to determine max_threads based on available memory.I'll conduct some benchmarks showing that this approach performs better than default settings in a lot of different scenarios (and makes people worry less about thread configuration).
In regards to recent issues, spawning and destroying threads would also make the server more stable if we're experiencing timeouts (not sure yet how to safely destroy running threads).