If you aren't using cameras, you can try to disable rendering by setting an invalid DISPLAY variable in the terminal where you launch gzserver.
In terms of the CPU load for pure physics, please try adjusting the real_time_update_rate parameter (units of Hz). This is an upper limit on the number of physics time steps that will be taken per second. Multiplying this parameter by the time step size will yield the desired real time factor (default 1000 Hz * 1 ms = 1.00 real time factor). This parameter can be set in the sdf world file (see an example world).
You can also use the command line tool gz:
gz physics -u 1000