<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dhanalakshmi V</title>
    <description>The latest articles on DEV Community by Dhanalakshmi V (@shecodz).</description>
    <link>https://dev.to/shecodz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4026120%2F7eaa3dce-9206-4f27-98c9-fead3f9b0a4b.jpg</url>
      <title>DEV Community: Dhanalakshmi V</title>
      <link>https://dev.to/shecodz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shecodz"/>
    <language>en</language>
    <item>
      <title>CrushIt: Testing Server Limits with BEAM's Million-Worker Army</title>
      <dc:creator>Dhanalakshmi V</dc:creator>
      <pubDate>Sun, 12 Jul 2026 14:27:18 +0000</pubDate>
      <link>https://dev.to/shecodz/crushit-testing-server-limits-with-beams-million-worker-army-3anl</link>
      <guid>https://dev.to/shecodz/crushit-testing-server-limits-with-beams-million-worker-army-3anl</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ██████╗██████╗ ████████╗
 ██╔════╝██╔══██╗╚══██╔══╝
 ██║     ██████╔╝   ██║
 ██║     ██╔══██╗   ██║
 ╚██████╗██║  ██║   ██║
  ╚═════╝╚═╝  ╚═╝   ╚═╝
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Exists
&lt;/h2&gt;

&lt;p&gt;Most load testing tools are glorified curl loops. They spawn threads, fire requests, and call it a day. But the BEAM VM — the battle-tested runtime behind WhatsApp, Discord, and RabbitMQ — can do something no other VM can: spawn &lt;strong&gt;millions&lt;/strong&gt; of lightweight processes that actually perform.&lt;/p&gt;

&lt;p&gt;CrushIt exploits this. Not as a toy. As a weapon.&lt;/p&gt;

&lt;h2&gt;
  
  
  What It Does
&lt;/h2&gt;

&lt;p&gt;CrushIt is a penetration testing framework that turns your machine into a stress-testing powerhouse. One binary. One command. Up to &lt;strong&gt;1,000,000 concurrent workers&lt;/strong&gt; hammering a target.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./crush_it &lt;span class="nt"&gt;--url&lt;/span&gt; http://target.com &lt;span class="nt"&gt;--concurrency&lt;/span&gt; 100000 &lt;span class="nt"&gt;--forever&lt;/span&gt; &lt;span class="nt"&gt;--allow-remote&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. That's the attack.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;p&gt;On a standard laptop against a Python HTTP server:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workers&lt;/th&gt;
&lt;th&gt;Requests&lt;/th&gt;
&lt;th&gt;Throughput&lt;/th&gt;
&lt;th&gt;Avg Latency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;6,856&lt;/td&gt;
&lt;td&gt;1,382 req/s&lt;/td&gt;
&lt;td&gt;7ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;6,234&lt;/td&gt;
&lt;td&gt;1,020 req/s&lt;/td&gt;
&lt;td&gt;147ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Against a real web application with database queries, auth middleware, and template rendering? Those numbers drop to zero fast. That's the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────┐
│          Supervisor (one_for_one)    │
│  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐  │
│  │ W1  │ │ W2  │ │ W3  │ │ ... │  │
│  └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘  │
│     │       │       │       │      │
│     └───────┴───────┴───────┘      │
│              ↓                      │
│         Collector                   │
│    (atomics-based counting)         │
└─────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each worker is a GenServer that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Checks cancellation/deadline/request cap&lt;/li&gt;
&lt;li&gt;Fires an HTTP request via &lt;code&gt;:httpc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Reports result to collector&lt;/li&gt;
&lt;li&gt;Loops immediately — no idle time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The collector uses &lt;code&gt;:atomics&lt;/code&gt; for lock-free counting. No mutexes. No bottlenecks. Pure BEAM.&lt;/p&gt;

&lt;h3&gt;
  
  
  The TUI (Ink + React)
&lt;/h3&gt;

&lt;p&gt;Three screens:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configure&lt;/strong&gt; — Set URL, workers, duration, method, headers. Toggle DOS mode.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Running&lt;/strong&gt; — Live metrics with sparklines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;1810 req · 1810 ok · 0 fail · 187 req/s · 263ms avg · 9.65s
Latency p50=246ms · p95=256ms · p99=259ms
███████████████████████████████████████████████████████
Status 200:1810
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Report&lt;/strong&gt; — Pass/fail verdict based on success rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  DOS Mode
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./crush_it &lt;span class="nt"&gt;--url&lt;/span&gt; http://target.com &lt;span class="nt"&gt;--forever&lt;/span&gt; &lt;span class="nt"&gt;--concurrency&lt;/span&gt; 500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs indefinitely. Workers loop continuously. No pause between requests. The target either handles it or dies. Ctrl+C to stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1M workers&lt;/strong&gt; — BEAM handles it. Your target might not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6 HTTP methods&lt;/strong&gt; — GET, POST, PUT, DELETE, PATCH, HEAD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom headers &amp;amp; body&lt;/strong&gt; — Auth tokens, content types, whatever&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ramp-up&lt;/strong&gt; — Stagger worker startup to simulate gradual load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request cap&lt;/strong&gt; — Stop after N total requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency percentiles&lt;/strong&gt; — p50, p95, p99 computed from rolling buffer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON streaming&lt;/strong&gt; — Pipe to jq, dashboards, custom tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live TUI&lt;/strong&gt; — No 300-line config files. Point, configure, crush.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://codeberg.org/PandaternOSS/Crush_it.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Crush_it
./build.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Requires Elixir 1.14+ and Node.js 18+.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Philosophy
&lt;/h2&gt;

&lt;p&gt;Security tools should be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Simple&lt;/strong&gt; — One binary, one command&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest&lt;/strong&gt; — Show real metrics, not inflated marketing numbers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Powerful&lt;/strong&gt; — Exploit the platform's strengths (BEAM = processes)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CrushIt doesn't pretend to be a sophisticated APT framework. It's a hammer. Sometimes you need a hammer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Elixir&lt;/strong&gt; — BEAM VM, supervision trees, OTP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ink&lt;/strong&gt; — React for CLIs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;esbuild&lt;/strong&gt; — Fast JS bundling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;:httpc&lt;/strong&gt; — Erlang's built-in HTTP client&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  by valt
&lt;/h2&gt;




&lt;p&gt;&lt;em&gt;This tool is for authorized security testing only. Get permission before hammering anything you don't own.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>performance</category>
      <category>security</category>
      <category>showdev</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
