laravel / octane

Supercharge your Laravel application's performance.
https://laravel.com/docs/octane
MIT License
3.76k stars 294 forks source link

Operation not permitted after server OOM #919

Open Pluuk opened 3 months ago

Pluuk commented 3 months ago

Octane Version

2.3.4

Laravel Version

10.46.0

PHP Version

8.2.20

What server type are you using?

Swoole

Server Version

5.1.1

Database Driver & Version

No response

Description

When the server runs out of memory, swoole is restarted after a restart of the server. Swoole thinks that the process should still be active because the PID is still in the octane-server-state.json, but this process ID doesn't exist anymore. Then in line 22-24 of src/Swoole/SwooleExtension.php it tries to kill a PID which doesn't exist anymore, receives a Operation not permitted[1] error and crashes the process, which is not started anymore.

Steps To Reproduce

  1. Create a laravel octane instance.
  2. Start up the server
  3. Trigger an OOM error on the server
  4. Try to restart the octane instance
github-actions[bot] commented 3 months ago

Thank you for reporting this issue!

As Laravel is an open source project, we rely on the community to help us diagnose and fix issues as it is not possible to research and fix every issue reported to us via GitHub.

If possible, please make a pull request fixing the issue you have described, along with corresponding tests. All pull requests are promptly reviewed by the Laravel team.

Thank you!

driesvints commented 3 months ago

Thanks @Pluuk. Would appreciate help here in handling this gracefully. Most likely we'll need to somehow check if the PID still exists first?

Pluuk commented 3 months ago

Yes, but it could also be the case that the PID exists, but is not owned by octane anymore, thus we're not allowed to kill it. I'm not familiar enough with this, so I'm not able to create a PR for this unfortunately.

paramientos commented 2 weeks ago

Hey! Try chown -R www-data:www-data . on the root folder of Laravel if you are using Nginx as a web server