├── .gitignore ├── .npmignore ├── README.md ├── bun.lockb ├── maxrss.ts ├── package.json └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | bun.lockb 2 | tsconfig.json 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # maxrss 2 | 3 | Print the maximum memory usage of a process. 4 | 5 | ```bash 6 | $ bunx maxrss echo hello 7 | hello 8 | Peak memory usage: 1.36 MB 9 | ``` 10 | 11 | If you want to control the prefix of the output, you can use the `--prefix` flag: 12 | 13 | ```bash 14 | $ bunx maxrss --prefix="boop!" echo hello 15 | hello 16 | boop 1.36 MB 17 | ``` 18 | 19 | `--prefix` is the only flag, besides `--help`. 20 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jarred-Sumner/maxrss/7d95aac1a9dbe8b2bad19e54495be29ebe0979a7/bun.lockb -------------------------------------------------------------------------------- /maxrss.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bun 2 | import { spawnSync } from "bun"; 3 | 4 | let args = process.argv.slice(2); 5 | 6 | let prefix = "Peak memory usage:"; 7 | if (args[0]?.startsWith("--prefix=")) { 8 | prefix = args.shift()!.slice("--prefix=".length); 9 | } 10 | 11 | if (args.length === 0 || args[0] === "--help" || args[0] === "-h") { 12 | console.error("Usage: maxrss [--prefix=string] [args...]"); 13 | process.exit(1); 14 | } 15 | 16 | const { resourceUsage, exitCode } = spawnSync({ 17 | cmd: args, 18 | stdin: "inherit", 19 | stdout: "inherit", 20 | stderr: "inherit", 21 | }); 22 | 23 | if (resourceUsage.maxRSS > 1000 * 1000) { 24 | console.log( 25 | prefix, 26 | Number((resourceUsage.maxRSS / 1000 / 1000).toFixed(2)), 27 | "MB" 28 | ); 29 | } else { 30 | console.log(prefix, Number((resourceUsage.maxRSS / 1000).toFixed(2)), "KB"); 31 | } 32 | 33 | process.exit(exitCode); 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "maxrss", 3 | "version": "1.0.0", 4 | "module": "maxrss.ts", 5 | "bin": { 6 | "maxrss": "./maxrss.ts" 7 | }, 8 | "type": "module", 9 | "dependencies": { 10 | "bun-types": "latest" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["ESNext"], 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | "moduleDetection": "force", 7 | "jsx": "react-jsx", 8 | "allowJs": true, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "verbatimModuleSyntax": true, 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "skipLibCheck": true, 18 | "strict": true, 19 | "noFallthroughCasesInSwitch": true, 20 | "forceConsistentCasingInFileNames": true 21 | } 22 | } 23 | --------------------------------------------------------------------------------