Collect Emacs GC statistics
Bump version to 1.4.2
README.org: Add link to the EmacsConf2023 talk
Bump version to 1.4.1



You can also use your local clone with git send-email.

This package collects Emacs garbage collection (GC) statistics over time and saves it in the format that can be shared with Emacs maintainers.


See the source code for information how to contact the author.

[2023-12-06 Wed] You can find EmacsConf2023 presentation with analysis of the collected data (as of the timestamp date) at https://emacsconf.org/2023/talks/gc/. The data in reproducible format is available at https://dx.doi.org/10.5281/zenodo.10213384.



(require 'emacs-gc-stats)
;; Optionally reset Emacs GC settings to default values (recommended)
(setq emacs-gc-stats-gc-defaults 'emacs-defaults)
;; Optionally set reminder to upload the stats after 3 weeks.
(setq emacs-gc-stats-remind t) ; can also be a number of days
;; Optionally disable logging the command names
;; (setq emacs-gc-stats-inhibit-command-name-logging t)
(emacs-gc-stats-mode +1)

to your init file to enable the statistics acquiring.

When you are ready to share the results, run M-x emacs-gc-stats-save-session and then share the saved emacs-gc-stats-file (defaults to ~/.emacs.d/emacs-gc-stats.eld) by sending an email attachment to mailto:emacs-gc-stats@gnu.org. You can review the file before sharing–it is a text file.

Configure emacs-gc-stats-remind to make Emacs display a reminder about sharing the results.

#Security considerations

This package does not upload anything automatically. You will need to upload the data manually, by sending email attachment. If necessary, you can review emacs-gc-stats-file (defaults to ~/.emacs.d/emacs-gc-stats.eld) before uploading–it is just a text file.

The following data is being collected after every command:

  • GC settings gc-cons-threshold and gc-cons-percentage
  • Emacs version and whether Emacs framework (Doom, Prelude, etc) is used
  • Whether gcmh-mode is used
  • Idle time and Emacs uptime
  • Available OS memory (see memory-info)
  • Emacs memory allocation/GC stats
  • Current command name (potentially sensitive data, can be disabled)
  • Timestamp when every GC is finished

Logging the command names can be disabled by setting emacs-gc-stats-inhibit-command-name-logging customization.

What exactly is being logger is controlled by emacs-gc-stats-setting-vars, emacs-gc-stats-command-vars, and emacs-gc-stats-summary-vars.

You can use M-x emacs-gc-stats-clear to clear the currently collected session data.

You can pause the logging any time by disabling emacs-gc-stats-mode (M-x emacs-gc-stats-mode).


#Version 1.4.1

  • Avoid memory-info trying to retrieve memory information from remote system over TRAMP.

#Version 1.4

  • emacs-gc-stats-file is now compressed, when possible.

#Version 1.3

  • New customization: emacs-gc-stats-inhibit-command-name-logging to disable logging current command name. Logging is enabled by default.

  • New customization: emacs-gc-stats-remind to set a reminder to share the data. Reminder is disabled by default.

  • The data being collected is can now be customized using emacs-gc-stats-setting-vars, emacs-gc-stats-command-vars, and emacs-gc-stats-summary-vars.