How can I achieve better load balancing of different systems on a Jenkins? We have four test machines spread over a Jenkins.

We would like to have a better distribution. Example: If machine one is running with a test job, the second job should detect that node one is running and directly take the next free instance to start another job there.

I have not found a suitable plugin, instructions on this topic, which represents exactly this sufficient.
The default behavior of Jenkins is to use the same node over and over unless it's unavailable. If you use labels you can target resources.

Take a look at plugins like Least Load and Scoring Load Balancer to help distribute the load. CloudBees also provides an Even Scheduler plugin as a commercial offering.

Kubernetes (e.g. Kubernetes Plugin) to schedule ephemeral agents could also satisfy your distribution needs.