Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simonepri/sympact
🔥 Stupid Simple CPU/MEM "Profiler" for your JS code.
https://github.com/simonepri/sympact
benchmark cli cpu damage impact memory nodejs pid pids process profile resources system usage
Last synced: about 5 hours ago
JSON representation
🔥 Stupid Simple CPU/MEM "Profiler" for your JS code.
- Host: GitHub
- URL: https://github.com/simonepri/sympact
- Owner: simonepri
- License: mit
- Created: 2018-03-21T22:37:36.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-05-28T13:59:10.000Z (over 6 years ago)
- Last Synced: 2024-12-15T05:09:07.069Z (7 days ago)
- Topics: benchmark, cli, cpu, damage, impact, memory, nodejs, pid, pids, process, profile, resources, system, usage
- Language: JavaScript
- Homepage:
- Size: 271 KB
- Stars: 440
- Watchers: 9
- Forks: 18
- Open Issues: 2
-
Metadata Files:
- Readme: readme.md
- Contributing: .github/contributing.md
- License: license
- Code of conduct: .github/code-of-conduct.md
Awesome Lists containing this project
README
🔥 An easy way to calculate the 'impact' of running a task in Node.JS
Coded with ❤️ by Simone Primarosa.
## Synopsis
Sympact runs a script and profiles its execution time, CPU usage, and memory usage. Sympact then returns an execution report containing the averages of the results.
Do you believe that this is *useful*?
Has it *saved you time*?
Or maybe you simply *like it*?
If so, [show your appreciation with a Star ⭐️][start].## How it works
sympact spawns a separate process and runs your script in an isolated
node process and then collects statistics about the system's resource used by
your script.The data are collected using [pidusage][gh:pidusage] in combination with
[pidtree][gh:pidtree].
**The main difference between other projects is that sympact will also
"profile" processes spawned by your script or by any of its children.**Finally a report of the samples taken is computed and returned to you.
## Install
```bash
npm install --save sympact
```## Usage
```js
const impact = require('sympact');const report = await impact(`
let r = 2;
let c = 10e7;
while (c--) r = Math.pow(r, r);
return r;
`, {interval: 125}); // 125 ms of sampling rateconsole.log(report.times.execution.end - report.times.execution.start);
// => 2700 ms
console.log(report.stats.cpu.mean);
// => 90.45 % on my machine
console.log(report.stats.memory.mean);
// => 27903317.33 bytes on my machine
```## CLI
To make it more usable, a CLI is bundled with the package allowing for an aesthetically pleasing report.
```bash
npx sympact "console.log('Hello World')"
```You can even require other files.
```bash
npx sympact "
const {spawn} = require('child_process');
let childno = 10;
let childs = [];
for (let i = 0; i < childno; i++) {
childs.push(spawn('node', ['-e', 'setInterval(()=>{let c=10e3;while(c--);},10)']));
}
let c = 10e6;
let m = {};
while (c--) m[c] = c;
for (let i = 0; i < childno; i++) {
childs[i].kill();
}
"
```## Report object
The object returned by the promise will look like this.
```js
{
"times": {
"sampling": {
"start": 1521666020917, // ms since epoch
"end": 1521666036041 // ms since epoch
},
"execution": {
"start": 1521666020958, // ms since epoch
"end": 1521666036006 // ms since epoch
}
},
"stats": {
"cpu": { // CPU usage statistics (percentage)
"mean": 74.17368421052636,
"median": 75.1,
"stdev": 11.820700343128212,
"max": 94.7,
"min": 0.7
},
"memory": { // RAM usage statistics (bytes)
"mean": 1080202186.1052632,
"median": 1327509504,
"stdev": 416083837.44653314,
"max": 1327513600,
"min": 23441408
}
},
"samples": { // List of all the samples taken
"period": 125, // Sampling period
"count": 114, // Number of samples taken
"list": {
"39": { // Taken after 39ms after the start of the watch command
"cpu": 0.7, // Sum of the usages of all the processes
"memory": 23441408, // Sum of the memory of all the processes
"processes": [{ // List of processes profiled in this timeframe
"cpu": 0.7,
"memory": 23441408,
"ppid": 837,
"pid": 839,
"ctime": 6000,
"elapsed": 1000,
"timestamp": 1521666020955 // ms since epoch
}]
},
"205": {
"cpu": 14.8,
"memory": 55685120,
"processes": [{
"cpu": 14.8,
"memory": 55685120,
"ppid": 837,
"pid": 839,
"ctime": 15000,
"elapsed": 2000,
"timestamp": 1521666021122
}]
},[...]
"15124": {
"cpu": 81.2,
"memory": 878133248,
"processes": [{
"cpu": 81.2,
"memory": 878133248,
"ppid": 837,
"pid": 839,
"ctime": 47600,
"elapsed": 17000,
"timestamp": 1521666036041
}]
}
}
}
}
```## API
### sympact(code, [options]) ⇒
Promise.<Object>
Measures the impact of running a certain script on your system.
Monitors the cpu and memory usage of the whole tree of processes generated by
the script provided.**Kind**: global function
**Returns**:Promise.<Object>
- An object containing the results.
**Access**: public| Param | Type | Default | Description |
| --- | --- | --- | --- |
| code |string
| | The source code to test. |
| [options] |Object
| | Optional configurations. |
| [options.interval] |number
|125
| Sampling interval in milliseconds. |
| [options.cwd] |string
|"caller path"
| CWD for the script. |## Contributing
Contributions are REALLY welcome and if you find a security flaw in this code, PLEASE [report it][new issue].
Please check the [contributing guidelines][contributing] for more details. Thanks!## Authors
- **Simone Primarosa** - *Follow* me on *Github* ([:octocat:@simonepri][github:simonepri]) and on *Twitter* ([🐦@simonepri][twitter:simoneprimarosa])
See also the list of [contributors][contributors] who participated in this project.
## License
This project is licensed under the MIT License - see the [license][license] file for details.
[start]: https://github.com/simonepri/sympact#start-of-content
[new issue]: https://github.com/simonepri/sympact/issues/new
[contributors]: https://github.com/simonepri/sympact/contributors[license]: https://github.com/simonepri/sympact/tree/master/license
[contributing]: https://github.com/simonepri/sympact/tree/master/.github/contributing.md[github:simonepri]: https://github.com/simonepri
[twitter:simoneprimarosa]: http://twitter.com/intent/user?screen_name=simoneprimarosa[gh:pidusage]: https://github.com/soyuka/pidusage
[gh:pidtree]: https://github.com/simonepri/pidtree