It is a tough question to answer. Many people struggle with this because there is no "rule of thumb", each individuals situation is different. Not all customers are created equal, what I mean is some will just make calls, but others may have lots of BLFs etc. and this makes a big difference on how many handsets can go on a box.
I know there was a demonstration at Cluecon of a machine running 1 sofia profile and handling 1000 cps with 30,000 concurrent calls, but the pure call numbers are not the significant factor.
I'm sure your box will take a lot more traffic. The weakest link as I see it is mod_sofia. This is what handles SIP for FreeSWICTH, simply handling an INVITE for a call is no big deal but if it also has to generate XML and send BLF notifications to a hundred other phones to say the INVITE is happening, then it starts to become a big deal. So unless the handsets are all configure exactly the same, and all the users make exactly the same number of calls at exactly the same time intervals it is impossible to say how many handsets any given system can handle.
But its not all bad news, we just have to monitor the system as we add more handsets. One thing you can do is take a packet capture for 10 to 15 minutes when your system is busy, then in Wireshark look at the SIP statistics look out for retries where a handset has sent a message to your box and then had to send it again because it did not get a response within the message time out period. This can be an indication that you SIP profile is too busy and is having trouble processing all the SIP messages (do do remember that packets can also get lost in the network).
You can add more SIP Profiles to share the load if required. The screenshot with top above is on a box running about 800 endpoints on a single SIP Profile.
My personal preference is to split my customers over a number of boxes, this way a performance issue with one box will not affect all of my customers, also if a box goes down ti doesn't take out all the customers. I currently run about 800 endpoints per VM and the VMs are running no where near their full capacity.
Some of the measures I also look at, apart from statistics in Wireshark are:
cat /proc/net/udp
mpstat -P ALL 1
netstat -lunp
ls /proc/$(pgrep freeswitch)/task/
I also periodically look at netstat -su and check the RcvbufErrors
I wrote up a cheat sheet somewhere, I'm sure I posted it on here but I can't find it right now. I'll add it to this thread if I find it.
EDIT: I think it is expected that you would have a SIP proxy in front of FreSWITCH once you hit a certain volume of traffic. OpenSIPS for example can take some of the registration and BLF load away from mod_sofia.