[erlang-questions] Request for opinions on using process dictionary for meta information
Mon Apr 17 23:07:18 CEST 2017
If you store some data that doesn't change much later — I see no problem
here, perfectly fine example of PD use.
But on the other hand, if you store mutable data in PD — this is considered
an antipattern and it makes your code have side effects which are hard to
track. Also when your process dies, all data in PD will be lost, which is
OK if data is set once, but not OK if the data was important.
2017-04-17 22:43 GMT+02:00 Jay Doane <jay.s.doane@REDACTED>:
> Our team is currently using the process dictionary to store meta
> information for long running processes, and would like to hear from folks
> familiar with beam internals whether this is a recommended practice.
> Essentially we add meta information about the current request in a process
> dictionary of every process related to handling of this request. This
> information could be:
> - current file
> - user name of initiator of the request
> - http query parameters
> - type of a process (indexer | compactor | http_handler)
> For example, when we detect performance problems, we run a function that
> returns the Pids of (say) top memory using processes. We use the meta info
> stored in process dictionaries to determine which documents are using
> excessive memory so we can take corrective action.
> In practice, we are unable to use normal OTP messaging because in many
> cases, the high memory using processes have also grown huge message queues,
> and so would be unresponsive to any additional messages.
> Given our existing constraints, is this a reasonable use of the process
> erlang-questions mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions