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.