{"id":13507787,"url":"https://github.com/proger/eflame","last_synced_at":"2026-02-18T09:41:57.155Z","repository":{"id":10513508,"uuid":"12701335","full_name":"proger/eflame","owner":"proger","description":"Flame Graph profiler for Erlang","archived":false,"fork":false,"pushed_at":"2023-12-13T14:59:28.000Z","size":37,"stargazers_count":429,"open_issues_count":7,"forks_count":87,"subscribers_count":20,"default_branch":"master","last_synced_at":"2026-02-15T20:51:29.000Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"githubschool/github-games","license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/proger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2013-09-09T12:51:40.000Z","updated_at":"2026-02-12T15:28:35.000Z","dependencies_parsed_at":"2024-01-08T20:18:57.909Z","dependency_job_id":null,"html_url":"https://github.com/proger/eflame","commit_stats":{"total_commits":39,"total_committers":9,"mean_commits":4.333333333333333,"dds":"0.20512820512820518","last_synced_commit":"34d0c19dee808d614d75d91c143386d5120efb4b"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/proger/eflame","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proger%2Feflame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proger%2Feflame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proger%2Feflame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proger%2Feflame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/proger","download_url":"https://codeload.github.com/proger/eflame/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proger%2Feflame/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29575103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T08:38:15.585Z","status":"ssl_error","status_checked_at":"2026-02-18T08:38:14.917Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T02:00:39.091Z","updated_at":"2026-02-18T09:41:52.139Z","avatar_url":"https://github.com/proger.png","language":"Perl","funding_links":[],"categories":["Debugging","Code Analysis"],"sub_categories":[],"readme":"## eflame\n\n[Flame Graphs](http://dtrace.org/blogs/brendan/2011/12/16/flame-graphs/) for Erlang.  Uses `erlang:trace/3` API.\n\n![screenshot](http://i.imgur.com/XIDAcd3.png)\n\nFurther development of `eflame` using proper stack sampling-based profiling and experimental Erlang\ntracing changes are available under [Scott Lystig Fritchie's](https://github.com/slfritchie/eflame) fork.\nIt also contains [amazing peeks inside Riak](https://github.com/slfritchie/eflame/blob/master/README-Riak-Example.md).\nMake sure to check out his talk, [Actively Measuring And Profiling Erlang Code](http://www.snookles.com/erlang/ef2015/slf-presentation.html).\n\nUsage example: https://github.com/proger/active/commit/81e7e40c9dc5a4666742636ea4c5dfafc41508a5\n\n```erlang\n\u003e eflame:apply(normal_with_children, \"stacks.out\", my_module, awesome_calculation, []).\n\u003e eflame:apply(my_module, awesome_calculation, []). % same as above\n\u003e eflame:apply(fun my_module:awesome_calculation/0, []). % same as above\n\u003e eflame:apply(fun awesome_calculation/0, []). % same as above, when called in my_module.erl\n\u003e eflame:apply(normal, \"stacks.out\", my_module, awesome_calculation, []). % won't trace children\n```\n\n```sh\n$ stack_to_flame.sh \u003c stacks.out \u003e flame.svg\n$ open flame.svg\n```\n\n### Notes\n\n* as stacks are collected through tracing, blocking calls are noticed and are drawn in blue\n\n* unlike the reference implementation, `flamegraph.pl` does not sort the input to preserve the order of calls\n  (since this is possible due to current method of collecting stacks)\n\n```sh\n$ grep 0.90.0 stacks.out | deps/eflame/flamegraph.pl \u003e flame.svg\n\n# this invocation draws a separate flame graph for each traced process\n$ for pid in $(cat stacks.out | awk -F';' '{print $1}' | uniq | tr -d '\u003c\u003e'); do\n    grep $pid stacks.out | deps/eflame/flamegraph.pl --title=\"$pid\" \u003e flame_$pid.svg;\ndone\n\n# you may also use stacks_to_flames.sh (uses zsh)\n$ deps/eflame/stacks_to_flames.sh stacks.out\n```\n\n### More examples\n\nOf course you can also apply a bazillion of transformations to get a more understandable stack, for example:\n\n```sh\n$ grep 0.90.0 stacks.out | sort | uniq -c | sort -n -k1 | sort -k2 | awk '{print $2, \"\", $1}' \u003e stacks.90\n$ perl -pi -e 's#eflame:apply/5;rebar_core:process_commands/2;##' stacks.90\n$ perl -pi -e 's#rebar_core:execute/.;##g' stacks.90\n$ perl -pi -e 's#rebar_core:process_dir.?/.;##g' stacks.90\n$ perl -pi -e 's#rebar_core:process_each/.;##g' stacks.90\n$ perl -pi -e 's#rebar_core:run_modules\\w*/.;##g' stacks.90\n$ perl -pi -e 's#lists:\\w+/.;##g' stacks.90\n$ perl -pi -e 's#/\\d+;#;#g' stacks.90\n$ perl -pi -e 's#io_lib_pretty:[^;]+;##g' stacks.90\n$ cat stacks.90 | sort -k1 | deps/eflame/flamegraph.pl --width=1430 \u003e flame.svg\n```\n\nThe following picture is a cleaned flame graph for a run of `rebar compile` (using [active](https://github.com/proger/active))\non a project with 15 dependencies where all files are already compiled:\n\n![rebar compile cleaned flame graph](http://i.imgur.com/hLXx7LO.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproger%2Feflame","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fproger%2Feflame","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproger%2Feflame/lists"}