If you’re like me, you’ve got a shoutcast server configured to handle thousands of connections. I was pretty sure my setup could handle the load, but I wanted to actually find out. After looking around online, I found out an easy way to stress test the server using curl. Here’s a little script I wrote that will allow you to murder your server :D. Run this script on a test machine with a decent internet connection so you can really stress the server. This script should run on basically any linux operating system. I used Ubuntu as my test box.
Just a few things before you run the script.. You will need vnstat (or you’ll have to comment it out) to get the most of the script. Also, be careful with how many threads you run. If your server has the ulimit too low, you could lock up the shoutcast server.
#!/bin/bash echo "enter a URL to stress test. ex: http://radio.derp.com:8123" read URL echo "enter number of threads to run. ex: 50" read THREADS for ((N=0; N<$THREADS; N++)) do curl -o /dev/null $URL >> /dev/null 2>&1 & done echo "Created "$THREADS" threads connected to "$URL echo "Live Bandwidth" echo "hit ctrl-c when you are finished" vnstat -l echo "Press any button and hit enter to kill all curl processes! Thanks!" read Q killall -e curl
If you have any questions please leave a comment below. Thanks
Here’s an example of the script in action.
./shoutcast_stress.sh enter a URL to stress test. ex: http://radio.derp.com:8123 stream.willstare.com:8123 enter number of threads to run. ex: 50 1500 Created 1500 threads connected to stream.willstare.com:8123 Live Bandwidth hit ctrl-c when you are finished Monitoring em0... (press CTRL-C to stop) rx: 50.45 Mbit/s 4514 p/s tx: 2.48 Mbit/s 4503 p/s
And bandwidth usage on the server
rx: 4.14 Mbit/s 7706 p/s tx: 66.88 Mbit/s 8105 p/s
And what Shoutcast looks like with 1500+ connections:
There’s a few glitches (backspace might now work when entering stream URL), but I think its a good tool.