Excimer profiler
Versions
Current version
2026031705 (2026031705)
2026031705
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2026031705
Version release name: 2026031705
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Moodle supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5-4.2 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Totara supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Totara 10-18 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 19 | TOTARA_19 | 8.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2026031704 (2026031704)
2026031704
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2026031704
Version release name: 2026031704
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Moodle supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5-4.2 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Totara supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Totara 10-18 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 19 | TOTARA_19 | 8.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2026031703 (2026031703)
2026031703
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2026031703
Version release name: 2026031703
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Moodle supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5-4.2 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Totara supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Totara 10-18 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 19 | TOTARA_19 | 8.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024091602 (2024091602)
2024091602
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024091602
Version release name: 2024091602
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2025110600 (2025110600)
2025110600
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2025110600
Version release name: 2025110600
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Moodle supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5-4.2 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Totara supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Totara 10-18 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 19 | TOTARA_19 | 8.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024091601 (2024091601)
2024091601
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024091601
Version release name: 2024091601
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2025110500 (2025110500)
2025110500
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2025110500
Version release name: 2025110500
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Moodle supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5-4.2 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Totara supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Totara 10-18 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 19 | TOTARA_19 | 8.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2025041700 (2025041700)
2025041700
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2025041700
Version release name: 2025041700
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Moodle supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5-4.2 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Totara supported branches
| version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Totara 10-18 | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 19 | TOTARA_19 | 8.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024110100 (2024110101)
2024110100
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024110101
Version release name: 2024110100
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024110100 (2024110100)
2024110100
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024110100
Version release name: 2024110100
Maturity: Stable
Supported Moodle versions: 4.3, 4.4, 4.5
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_403_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|-------|------------|
| Moodle 4.3+ | MOODLE_403_STABLE | 8.1 | 2024110100 |
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024091600 (2024091600)
2024091600
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024091600
Version release name: 2024091600
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024091200 (2024091200)
2024091200
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024091200
Version release name: 2024091200
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Applying core patches
- Troubleshooting
- Usage
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Usage
When auto profiling is enabled, profiling will happen automatically when request exceeds the Minimum request duration (for webservice or webpage requests) or Task min duration (for adhoc and scheduled tasks)
However profiling can be forced by specifing the FLAMEME parameter.
For example:
- Via web:
/course/view.php?id=1&FLAMEME=1 - Via CLI:
export FLAMEME=1 && php admin/cli/upgrade.php
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024082301 (2024082301)
2024082301
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024082301
Version release name: 2024082301
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Troubleshooting
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024052400 (2024052400)
2024052400
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024052400
Version release name: 2024052400
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Troubleshooting
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2024050700 (2024050700)
2024050700
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2024050700
Version release name: 2024050700
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Troubleshooting
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2023082901 (2023082901)
2023082901
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2023082901
Version release name: 2023082901
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Troubleshooting
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2023060200 (2023060200)
2023060200
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2023060200
Version release name: 2023060200
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Troubleshooting
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.

What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia:
2022092802 (2023050800)
2022092802
Plugin type: Administration tools
Frankenstyle component name: tool_excimer
Version build number: 2023050800
Version release name: 2022092802
Maturity: Stable
Supported Moodle versions: 3.10, 3.11, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1
Repository URL (Git): https://github.com/catalyst/moodle-tool_excimer
Repository branch: MOODLE_35_STABLE
Repository tag:
Issue/bug tracker URL: https://github.com/catalyst/moodle-tool_excimer/issues
moodle-tool_excimer
- What is this plugin?
- What this plugin is not
- Design principles
- Branches
- Installation
- Troubleshooting
- Support
- Credits
What is this plugin?
This is a Moodle admin plugin that provides developers with insights into not
only what pages in your site are slow, but why. It uses the the Excimer sampling
php profiler to so.
It is complementary to the profiler in core which uses Tideways. The key downside
to Tideway is that it has a substantial performance hit and can't be used in
production to capture everything and only later decide what to keep or analyse.
Looking at your web server logs tells you what is slow but not why. Using Tideways
is a critical tool if you can reproduce an issue, but cannot be used to say why
something was slow retrospecively last Friday out of hours and you only found out
a few days later.
What this plugin is not
This plugin does not aim to replace the core Tideways based profiler, they are complimentary.
Because Tideways instruments every single call, it can be used for a variety of
things that Excimer cannot, such as determining in production if a particular code
path was executed or not.
This plugin does also not aim to be a full Application performance management (APM)
solution such as New Relic. But if you don't have or cannot afford an APM this
plugin should be another great tool to have in your tool box.
Design principles
1) Do no harm
This plugin is designed to be running constantly in production profiling everything and
only storing things which are of interest in various ways. So it is critical that this
plugin has an extremely low foot print, in all dimensions: CPU, memory, and with IO to
the DB, file system and even caches. In the vast majority of requests when things are
running smoothly it will discard the profile and it's overall impact should be close
to zero. Even when it is storing and processing profiles, keep the impact as low as
possible and defer things until needed if possible or worse case to a cron task.
An extension of this is 'don't escalate', meaning if something fundamentally goes wrong
at a low level inf level, then avoid making things worse.
2) Don't make me think
Rather that a low level tool which you have to drive, the intent of this plugin is to
give clear actionable suggestions about specific changes to code to improve it. There
may be many potential reasons why a particular request is 'interesting' in some way.
This plugin aims to detect a range of opportunities to improve performance such as:
- when a session lock is held too long without session changes
- when a session may be a readonly candidate
- when buffering might be better turned off
- when http headers, or a partial body, should be sent earlier
- and diagnoising slow pages retrospectively
- slow cron tasks
- and this list will evolve over time
3) Auto tune configuration
The idea is that this plugin starts with sensible defaults that should work for a
wide range of environments and as it records details around your sites performance it
adjusts to show you the most relevant things.
4) It's always current
If you had a bad event 6 months ago and things have been running fine, that information
is less relevant that something last night which wasn't as extreme but still worth knowing
about. As you make changes improvements to code it should be smart enough to prioritise
what matters.
Branches
| Moodle version | Branch | PHP | Excimer |
|-------------------|------------------|------|------------|
| Moodle 3.5+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
| Totara 10+ | MOODLE_35_STABLE | 7.1+ | 1.0.2+ |
Installation
PHP Extension
Details on the php extension are here:
https://www.mediawiki.org/wiki/Excimer
Using apt
sudo apt install php-excimer
Using PECL
pecl install excimer
docker-php-ext-enable excimer
Moodle Plugin
From Moodle siteroot:
git clone git@github.com:catalyst/moodle-tool_excimer.git admin/tool/excimer
Then login as admin (it should detect the extension), and click through the upgrade process.
Applying core patches
For Moodle versions lower than 4.1 this plugin requires Moodle tracker MDL-75014 to be backported to maintain the plugin functionality.
Moodle 3.5 - 4.0:
Apply the patch:
git am --whitespace=nowarn < admin/tool/excimer/patch/MOODLE_35_STABLE.diff
Troubleshooting
ExcimerProfiler class does not exist.
If you use containers, and install the package via apt/PECL, you may see this error. When this happens, you may need to stop and start up the container again, as it sometimes does not load installed packages fully whilst running, and afterwards it should work.
Support
If you find code issues please log them in GitHub here
https://github.com/catalyst/moodle-tool_excimer/issues
Please note our time is limited, so if you need urgent support or want to
sponsor a new feature then please contact Catalyst IT Australia:
https://www.catalyst-au.net/contact-us
Credits
Thanks in particular to the to the Wikimedia Foundation for building the awesome Excimer profiler:
https://github.com/wikimedia/php-excimer/
This plugin was developed by Catalyst IT Australia: