Yes, every lnxded server only runs in 1 thread and there isn't much you can do about it (besides learning libcod and rewrite it for multithread support e.g.)

I'm not sure, but I guess the player-player-collision is what causes lots of CPU stress. The algorithm is totally stupid, like testing each player against every other player... might be possible to just deactivate player-player collision via libcod and tell us if that works.

Another possibility: optimize .gsc scripts... you could add another scripting engine running in a 2nd thread like Duktape/JavaScript.

Whatever you decide for, there is no easy road I guess, all takes some work to master.