• The usual testlib.h doesn’t work for domjudge. There is a domjudge version of testlib.h on the Github, but it won’t work well with TPS.

  • It is unnecessarily complicated to run domserver using Docker. Install mariadb and domserver directly on the machine.

  • Run sudo mysql_secure_installation after installing database.

  • After running ./configure --prefix=/opt/domjudge, make sure user of nginx (usually www-data) has read access to /opt/domjudge.

  • Configure control groups for judgehosts (docs).


  • Anytime you change isolcpus kernel parameter inside /etc/default/grub, don’t forget to sudo update-grub before rebooting.

  • Inside Configuration Settings, there is a option for data source. Set this to external and API will be a lot easier to work with.

  • Use NGINXConfig. You need to find correct places to insert the settings (domserver/etc/nginx-conf{,-inner}). Do not change location blocks that are provided with domjudge configuration (nginx-conf-inner).

  • Change time-zone and the number of PHP workers (domserver/etc/domjudge-fpm.conf). 40 workers need 1 CPU core and can handle about 40 teams.

  • There shouldn’t be a huge difference (more than 1 second) between wall time and CPU time for a submission. If there is, you may be running two judgehosts on the same CPU core.

  • Read Scaling and load testing.