[GH-ISSUE #1994] Part of check_permissions extremely slow #1565

Closed
opened 2026-02-27 02:57:51 +03:00 by kerem · 7 comments
Owner

Originally created by @Donkie on GitHub (Aug 28, 2018).
Original GitHub issue: https://github.com/GameServerManagers/LinuxGSM/issues/1994

Describe the bug
Running most commands take next to forever (multiple minutes sometimes) for me on my Ubuntu 14.04 server with a HDD drive. I've analyzed the issue using iotop and found that a process with the command 'find "/my/server/files" -not -user steam' occupies a whole lot of I/O usage. This HDD drive is rather slow I've found, and I got quite some files in said folder, but that shouldn't affect the performance of just starting the server.

The culprit code is found at github.com/GameServerManagers/LinuxGSM@0276b943e3/lgsm/functions/check_permissions.sh (L21-L25)
which, from my knowledge, tries to look through every single file in that folder and make sure the permissions are set correctly? Why is this necessary?

To Reproduce
Steps to reproduce the behaviour:

  1. Have a slow drive
  2. Have many files in your server files directory
  3. Run any LGSM command

Expected behaviour
That the command was fast and smooth

** Minimum Information **
Game server: Garry's Mod
https://hastebin.com/onufenuvox

Additional context

Originally created by @Donkie on GitHub (Aug 28, 2018). Original GitHub issue: https://github.com/GameServerManagers/LinuxGSM/issues/1994 **Describe the bug** Running most commands take next to forever (multiple minutes sometimes) for me on my Ubuntu 14.04 server with a HDD drive. I've analyzed the issue using iotop and found that a process with the command 'find "/my/server/files" -not -user steam' occupies a whole lot of I/O usage. This HDD drive is rather slow I've found, and I got quite some files in said folder, but that shouldn't affect the performance of just starting the server. The culprit code is found at https://github.com/GameServerManagers/LinuxGSM/blob/0276b943e37293b68f3dbc2aca4e6f57fa39073b/lgsm/functions/check_permissions.sh#L21-L25 which, from my knowledge, tries to look through every single file in that folder and make sure the permissions are set correctly? Why is this necessary? **To Reproduce** Steps to reproduce the behaviour: 1. Have a slow drive 2. Have many files in your server files directory 3. Run any LGSM command **Expected behaviour** That the command was fast and smooth ** Minimum Information ** Game server: Garry's Mod https://hastebin.com/onufenuvox **Additional context**
kerem 2026-02-27 02:57:51 +03:00
Author
Owner

@Donkie commented on GitHub (Aug 28, 2018):

After some additional research I found that this is partially my fault, an addon I had installed had created ~36,000 folders with logs which took some times to look through. However, I still don't think such a case should affect the performance of this program.

<!-- gh-comment-id:416613682 --> @Donkie commented on GitHub (Aug 28, 2018): After some additional research I found that this is partially my fault, an addon I had installed had created ~36,000 folders with logs which took some times to look through. However, I still don't think such a case should affect the performance of this program.
Author
Owner

@dgibbs64 commented on GitHub (Aug 28, 2018):

The permissions check normally takes less than a second to run. This is definitely the fault of the addon creating an extremely excessive number of files and dirs. So I would expect the find command to take a long time to get through all that.

So im not sure how you can think that having 36,000 dir's to scan shouldn't affect the performance of LinuxGSM.

What is the addon you are using? as there are checks for some gmod logs in LinuxGSM to clear them after x days

<!-- gh-comment-id:416637073 --> @dgibbs64 commented on GitHub (Aug 28, 2018): The permissions check normally takes less than a second to run. This is definitely the fault of the addon creating an extremely excessive number of files and dirs. So I would expect the `find` command to take a long time to get through all that. So im not sure how you can think that having 36,000 dir's to scan shouldn't affect the performance of LinuxGSM. What is the addon you are using? as there are checks for some gmod logs in LinuxGSM to clear them after x days
Author
Owner

@Donkie commented on GitHub (Aug 28, 2018):

I expected LGSM to not scan through my entire files at all every time I ran a command, why is this even necessary (especially with commands like stopping the server)? It should be up to the server software itself to check for permission issues if that's necessary in my opinion.

Even with all these directories removed it takes me atleast 5 seconds to perform the permission check.

It's a custom lua based anti cheat called Cake anti-cheat. It creates a directory for every player that joined the server with information about him. Sadly since they're not date based they can't be automatically cleaned.

<!-- gh-comment-id:416643023 --> @Donkie commented on GitHub (Aug 28, 2018): I expected LGSM to not scan through my entire files at all every time I ran a command, why is this even necessary (especially with commands like stopping the server)? It should be up to the server software itself to check for permission issues if that's necessary in my opinion. Even with all these directories removed it takes me atleast 5 seconds to perform the permission check. It's a custom lua based anti cheat called Cake anti-cheat. It creates a directory for every player that joined the server with information about him. Sadly since they're not date based they can't be automatically cleaned.
Author
Owner

@UltimateByte commented on GitHub (Aug 28, 2018):

This check has ben created to prevent issues while starting/stopping/updating the server. Since LinuxGSM cannot know when the user will actually make mistakes with file ownership and permission, it has to run the command every single time. While I can agree checking every time is agressive, I see no workaround, I don't want to leave the user disable the check since there would be dangerous behaviors, and ultimately, I've never seen a scenario where the delay for the check is noticeable.

<!-- gh-comment-id:416664157 --> @UltimateByte commented on GitHub (Aug 28, 2018): This check has ben created to prevent issues while starting/stopping/updating the server. Since LinuxGSM cannot know when the user will actually make mistakes with file ownership and permission, it has to run the command every single time. While I can agree checking every time is agressive, I see no workaround, I don't want to leave the user disable the check since there would be dangerous behaviors, and ultimately, I've never seen a scenario where the delay for the check is noticeable.
Author
Owner

@dgibbs64 commented on GitHub (Aug 28, 2018):

It should be up to the server software itself to check for permission issues if that's necessary in my opinion.

Out of the 80+ servers, 0 do permissions checks. It's the users responsibility to check permissions normally. However, we removed that burden and added the feature for LinuxGSM to do the check instead of the user, there is no faster way to do that than using the find command. The feature has been in place for a very long time now and this is the first time an issue has been raised regarding a slowdown, so your situation is an exception to the norm.

The check is in place as many users don't understand permissions and can sometimes mess them up causing odd behaviour that's hard to diagnose. As @UltimateByte states the check is aggressive but there is no other way to guarantee that there are no permissions issues every time. Hope this explains why it has to be done.

<!-- gh-comment-id:416763312 --> @dgibbs64 commented on GitHub (Aug 28, 2018): ``` It should be up to the server software itself to check for permission issues if that's necessary in my opinion.``` Out of the 80+ servers, 0 do permissions checks. It's the users responsibility to check permissions normally. However, we removed that burden and added the feature for LinuxGSM to do the check instead of the user, there is no faster way to do that than using the find command. The feature has been in place for a very long time now and this is the first time an issue has been raised regarding a slowdown, so your situation is an exception to the norm. The check is in place as many users don't understand permissions and can sometimes mess them up causing odd behaviour that's hard to diagnose. As @UltimateByte states the check is aggressive but there is no other way to guarantee that there are no permissions issues every time. Hope this explains why it has to be done.
Author
Owner

@Donkie commented on GitHub (Aug 28, 2018):

I understand.

<!-- gh-comment-id:416766785 --> @Donkie commented on GitHub (Aug 28, 2018): I understand.
Author
Owner

@lock[bot] commented on GitHub (Aug 29, 2019):

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

<!-- gh-comment-id:525989803 --> @lock[bot] commented on GitHub (Aug 29, 2019): This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.
Sign in to join this conversation.
No labels
Atomic
Epic
cannot reproduce
command: backup
command: console
command: debug
command: details
command: fast-dl
command: install
command: mods
command: monitor
command: post-details
command: restart
command: send
command: start
command: stop
command: update
command: update-lgsm
command: validate
command: wipe
distro: AlmaLinux
distro: Arch Linux
distro: CentOS
distro: Debian
distro: Fedora
distro: RedHat
distro: Rocky Linux
distro: Ubuntu
distro: openSUSE
engine: goldsrc
engine: source
game: 7 Days to Die
game: ARMA 3
game: Ark: Survival Evolved
game: Assetto Corsa
game: Avorion
game: BATTALION: Legacy
game: Barotrauma
game: Battalion 1944
game: Battlefield 1942
game: Black Mesa: Deathmatch
game: Blade Symphony
game: Call of Duty 2
game: Call of Duty 4
game: Call of Duty: United Offensive
game: Counter-Strike 1.6
game: Counter-Strike 2
game: Counter-Strike: Global Offensive
game: Counter-Strike: Source
game: Day of Infamy
game: Dayz
game: Death Match Classic
game: Don't Starve Together
game: ET: Legacy
game: Eco
game: Factorio
game: Factorio
game: Garry's Mod
game: Half-Life
game: Hurtword
game: Insurgecy
game: Insurgecy
game: Insurgency: Sandstorm
game: Just Cause 3
game: Killing Floor
game: Killing Floor 2
game: Left 4 Dead 2
game: Minecraft
game: Minecraft Bedrock
game: Mordhau
game: Multi Theft Auto
game: Mumble
game: Natural Selection 2
game: No More Room in Hell
game: Pavlov VR
game: Post Scriptum
game: Project Zomboid
game: Quake 3
game: QuakeWorld
game: Red Orchestra: Ostfront 41-45
game: Return to Castle Wolfenstein
game: Rising World
game: Rust
game: San Andreas Multiplayer
game: Satisfactory
game: Soldat
game: Soldier of Fortune 2
game: Squad
game: Squad 44
game: Starbound
game: Stationeers
game: Sven Co-op
game: Team Fortress 2
game: Teamspeak 3
game: Teeworlds
game: Terraria
game: The Front
game: Unreal Tournament 2004
game: Unreal Tournament 3
game: Unreal Tournament 99
game: Unturned
game: Valheim
game: Wurm Unlimited
game: Zombie Master Reborn
game: label missing
good first issue
help wanted
info: alerts
info: dependency
info: docker
info: docs
info: email
info: query
info: steamcmd
info: systemd
info: tmux
info: website
info: website
needs more info
outcome: duplicate
outcome: issue resolved
outcome: issue resolved
outcome: issue unresolved
outcome: pr accepted
outcome: pr rejected
outcome: unconfirmed
outcome: wontfix
outcome: wrong forum
potential-duplicate
priority
pull-request
type: bug
type: feature
type: feature
type: feature request
type: game server request
type: refactor
waiting response
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/LinuxGSM#1565
No description provided.