Hi Nick.
I think that you are taking wrong conclusions on wrong assumptions. IMHO
I'm not trying defend clojure or erlang, I like them both. I try to explain me:
When you trying to scale one single machine to 1-2M persistent connections, the main problem will not be the virtual machine (jvm or beam), will be your operating system (among other factors mentioned later). Additionally, if you will try to scale in this manner in AWS, good luck, but I'm pretty sure you will found you pay much more that you have expected, because virtual machines on aws does not behaves like bare metal and will introduce additional IO latencies that you do not have expecting now.
Scaling horizontally does not implies buy more and more expensive servers. Implies buy more cheaper servers. In my personal and real experience... we have migrated one application from one monolitic high power server to 5-10 small servers (depending on demand), and we have started to have less applications errors, less timeouts, increase the maximum number of possible persistent connections.
Why? The JVM/Beam is not he only thing that runs on your machine, with bigger machine the operating system should handle much more IO, memory for connections, socket buffers, etc... that will implies big latencies and other consequences. You should do very high fine tuning of the operating system for make your OS not obstacle. And forget do it on virtual environment (aws)... Independently if you will use erlang or clojure, vertical scale is not a good approach in much of cases.
Later, you are taking a decision taking microbenchmarks. Is well know that micro benchmarks are very less precise that you are expecting. Have the ability to handle 2M persistent connections does not depends only on the server/language and how they handle the "hello world" request/response, where are other players in the equation: persistence and your business logic, operating system tuning, virtual/bare metal hardware, network hardware...
Do you want also have the persistence layer on the same server or in a separated one? Is a persistence layer also accepts 2M persistent connections? I don't mean nothing with it, only I want to say that 1-2M connections is very very big number of connections and is usually reached in very specific situations (for single machine). And the first challenge for to have an application that scales vertically to 2M connections is your code, not the language and its vm...
And finally, having everything in one server make it less fail tolerant, if the machine is gone, everything is gone...
The golden rule is: "Divide and conquer".
My two cents.
Andrey.