Skip to content
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

Remove caching to stop memory leak #129

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

zagor
Copy link

@zagor zagor commented Apr 17, 2024

If you run a uModbus server that receives frequent and varying requests for an extended period of time, you will notice it uses more and more memory.

This is due to two reasons:

  1. The memoize cache saves created messages, but they never expire.
    My quick fix to this is to stop using memoize.

  2. Python's internal struct.pack() also has a cache, which also does not automatically expire. This is mentioned at https://bugs.python.org/issue14596 but oddly marked as fixed even though the issue remains.
    My quick fix to this is to use python's inherent list concatenation syntax instead of struct packing where possible. I replaced every use of struct.pack() where it concerned bytes, but kept struct.pack() for words (because manual endian handling is noisy).

These changes were enough to stop the memory leak in my system. I assume performance is affected but I haven't measured it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant