Configuration

Piston provides many different configuration options to tweak Piston to meet your needs.

Configuration is specified through environment variables, prefixed with PISTON_.

Log Level

key: PISTON_LOG_LEVEL
default: INFO

Level of log output to provide.

One of DEBUG, INFO, WARN, ERROR or NONE

Bind Address

key: PISTON_BIND_ADDRESS
default: 0.0.0.0:2000

Port and IP address to bind the Piston API to.

Warning

Changing this value is not recommended.

This changes the bind address inside the container, and thus serves no purpose when running in a container

Data Directory

key: PISTON_DATA_DIRECTORY
default: /piston

Absolute path to piston related data, including packages and job contexts.

Warning

Changing this value is not recommended.

Some packages require absolute paths on disk at build time. Due to this, some packages may break when changing this parameter.

Runner GID/UID range

key:
    - PISTON_RUNNER_UID_MIN
    - PISTON_RUNNER_UID_MAX
    - PISTON_RUNNER_GID_MIN
    - PISTON_RUNNER_GID_MAX
default:
    - 1001
    - 1500
    - 1001
    - 1500

UID and GID ranges to use when executing jobs.

Warning

Changing this value is not recommended.

The piston container creates 500 users and groups by default, and reserves user/group 1000 for running the API. Any processes run by these users will be killed when cleaning up a job.

Disable Networking

key: PISTON_DISABLE_NETWORKING
default: true

Disallows access to socket syscalls, effectively disabling networking for jobs run by piston.

Max Process Count

key: PISTON_MAX_PROCESS_COUNT
default: 64

Maximum number of processes allowed to to have open for a job.

Resists against exhausting the process table, causing a full system lockup.

Output Max Size

key: PISTON_OUTPUT_MAX_SIZE
default: 1024

Maximum size of stdio buffers for each job.

Resist against run-away output which could lead to memory exhaustion.

Max Open Files

key: PISTON_MAX_OPEN_FILES
default: 64

Maximum number of open files at a given time by a job.

Resists against writing many smaller files to exhaust inodes.

Max File Size

key: PISTON_MAX_FILE_SIZE
default: 10000000 #10MB

Maximum size for a singular file written to disk.

Resists against large file writes to exhaust disk space.

Compile/Run timeouts

key:
  - PISTON_COMPILE_TIMEOUT
default: 10000

key:
  - PISTON_RUN_TIMEOUT
default: 3000

The maximum time that is allowed to be taken by a stage in milliseconds. Use -1 for unlimited time.

Compile/Run memory limits

key:
    - PISTON_COMPILE_MEMORY_LIMIT
    - PISTON_RUN_MEMORY_LIMIT
default: -1

Maximum memory allowed by a stage in bytes. Use -1 for unlimited memory usage.

Useful for running memory-limited contests.

Repository URL

key: PISTON_REPO_URL
default: https://github.com/engineer-man/piston/releases/download/pkgs/index

URL for repository index, where packages will be downloaded from.

Maximum Concurrent Jobs

key: PISTON_MAX_CONCURRENT_JOBS
default: 64

Maximum number of jobs to run concurrently.

Limit overrides

key: PISTON_LIMIT_OVERRIDES
default: {}

Per-language overrides/exceptions for the each of max_process_count, max_open_files, max_file_size, compile_memory_limit, run_memory_limit, compile_timeout, run_timeout, output_max_size. Defined as follows:

PISTON_LIMIT_OVERRIDES={"c++":{"max_process_count":128}}

This will give c++ a max_process_count of 128 regardless of the configuration.