feat: native overhead memory configuration for servers

This commit is contained in:
Elizabeth
2025-08-06 14:34:50 -05:00
parent 15785fe4b2
commit ae4e70af10
12 changed files with 64 additions and 2 deletions

View File

@@ -144,7 +144,7 @@ class ServersController extends Controller
try {
$this->buildModificationService->handle($server, $request->only([
'allocation_id', 'add_allocations', 'remove_allocations',
'memory', 'swap', 'io', 'cpu', 'threads', 'disk',
'memory', 'overhead_memory', 'swap', 'io', 'cpu', 'threads', 'disk',
'database_limit', 'allocation_limit', 'backup_limit', 'oom_disabled',
]));
} catch (DataValidationException $exception) {

View File

@@ -37,6 +37,7 @@ class StoreServerRequest extends ApplicationApiRequest
// Resource limitations
'limits' => 'required|array',
'limits.memory' => $rules['memory'],
'limits.overhead_memory' => $rules['overhead_memory'],
'limits.swap' => $rules['swap'],
'limits.disk' => $rules['disk'],
'limits.io' => $rules['io'],
@@ -82,6 +83,7 @@ class StoreServerRequest extends ApplicationApiRequest
'startup' => array_get($data, 'startup'),
'environment' => array_get($data, 'environment'),
'memory' => array_get($data, 'limits.memory'),
'overhead_memory' => array_get($data, 'limits.overhead_memory', 0),
'swap' => array_get($data, 'limits.swap'),
'disk' => array_get($data, 'limits.disk'),
'io' => array_get($data, 'limits.io'),

View File

@@ -20,6 +20,7 @@ class UpdateServerBuildConfigurationRequest extends ServerWriteRequest
'limits' => 'sometimes|array',
'limits.memory' => $this->requiredToOptional('memory', $rules['memory'], true),
'limits.overhead_memory' => $this->requiredToOptional('overhead_memory', $rules['overhead_memory'], true),
'limits.swap' => $this->requiredToOptional('swap', $rules['swap'], true),
'limits.io' => $this->requiredToOptional('io', $rules['io'], true),
'limits.cpu' => $this->requiredToOptional('cpu', $rules['cpu'], true),
@@ -31,6 +32,7 @@ class UpdateServerBuildConfigurationRequest extends ServerWriteRequest
//
// @see https://github.com/pterodactyl/panel/issues/1500
'memory' => $this->requiredToOptional('memory', $rules['memory']),
'overhead_memory' => $this->requiredToOptional('overhead_memory', $rules['overhead_memory']),
'swap' => $this->requiredToOptional('swap', $rules['swap']),
'io' => $this->requiredToOptional('io', $rules['io']),
'cpu' => $this->requiredToOptional('cpu', $rules['cpu']),

View File

@@ -27,6 +27,7 @@ use Pterodactyl\Exceptions\Http\Server\ServerStateConflictException;
* @property bool $skip_scripts
* @property int $owner_id
* @property int $memory
* @property int $overhead_memory
* @property int $swap
* @property int $disk
* @property int $io
@@ -87,6 +88,7 @@ use Pterodactyl\Exceptions\Http\Server\ServerStateConflictException;
* @method static \Illuminate\Database\Eloquent\Builder|Server whereImage($value)
* @method static \Illuminate\Database\Eloquent\Builder|Server whereIo($value)
* @method static \Illuminate\Database\Eloquent\Builder|Server whereMemory($value)
* @method static \Illuminate\Database\Eloquent\Builder|Server whereOverheadMemory($value)
* @method static \Illuminate\Database\Eloquent\Builder|Server whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|Server whereNestId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Server whereNodeId($value)
@@ -155,6 +157,7 @@ class Server extends Model
'description' => 'string',
'status' => 'nullable|string',
'memory' => 'required|numeric|min:0',
'overhead_memory' => 'sometimes|numeric|min:0',
'swap' => 'required|numeric|min:-1',
'io' => 'required|numeric|between:10,1000',
'cpu' => 'required|numeric|min:0',
@@ -180,6 +183,7 @@ class Server extends Model
'skip_scripts' => 'boolean',
'owner_id' => 'integer',
'memory' => 'integer',
'overhead_memory' => 'integer',
'swap' => 'integer',
'disk' => 'integer',
'io' => 'integer',

View File

@@ -46,7 +46,7 @@ class BuildModificationService
// If any of these values are passed through in the data array go ahead and set
// them correctly on the server model.
$merge = Arr::only($data, ['oom_disabled', 'memory', 'swap', 'io', 'cpu', 'threads', 'disk', 'allocation_id']);
$merge = Arr::only($data, ['oom_disabled', 'memory', 'overhead_memory', 'swap', 'io', 'cpu', 'threads', 'disk', 'allocation_id']);
$server->forceFill(array_merge($merge, [
'database_limit' => Arr::get($data, 'database_limit', 0) ?? null,

View File

@@ -54,6 +54,7 @@ class ServerConfigurationStructureService
'skip_egg_scripts' => $server->skip_scripts,
'build' => [
'memory_limit' => $server->memory,
'overhead_memory' => $server->overhead_memory,
'swap' => $server->swap,
'io_weight' => $server->io,
'cpu_limit' => $server->cpu,
@@ -112,6 +113,7 @@ class ServerConfigurationStructureService
'env' => $this->environment->handle($server),
'oom_disabled' => $server->oom_disabled,
'memory' => (int) $server->memory,
'overhead_memory' => (int) $server->overhead_memory,
'swap' => (int) $server->swap,
'io' => (int) $server->io,
'cpu' => (int) $server->cpu,

View File

@@ -148,6 +148,7 @@ class ServerCreationService
'skip_scripts' => Arr::get($data, 'skip_scripts') ?? isset($data['skip_scripts']),
'owner_id' => Arr::get($data, 'owner_id'),
'memory' => Arr::get($data, 'memory'),
'overhead_memory' => Arr::get($data, 'overhead_memory', 0),
'swap' => Arr::get($data, 'swap'),
'disk' => Arr::get($data, 'disk'),
'io' => Arr::get($data, 'io'),

View File

@@ -62,6 +62,7 @@ class ServerTransformer extends BaseTransformer
'suspended' => $server->isSuspended(),
'limits' => [
'memory' => $server->memory,
'overhead_memory' => $server->overhead_memory,
'swap' => $server->swap,
'disk' => $server->disk,
'io' => $server->io,

View File

@@ -55,6 +55,7 @@ class ServerTransformer extends BaseClientTransformer
'description' => $server->description,
'limits' => [
'memory' => $server->memory,
'overhead_memory' => $server->overhead_memory,
'swap' => $server->swap,
'disk' => $server->disk,
'io' => $server->io,

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddOverheadMemoryToServersTable extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('servers', function (Blueprint $table) {
$table->integer('overhead_memory')->unsigned()->default(0)->after('memory');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('servers', function (Blueprint $table) {
$table->dropColumn('overhead_memory');
});
}
}

View File

@@ -176,6 +176,19 @@
<p class="text-muted small">The maximum amount of memory allowed for this container. Setting this to <code>0</code> will allow unlimited memory in a container.</p>
</div>
<div class="form-group col-xs-6">
<label for="pOverheadMemory">Overhead Memory</label>
<div class="input-group">
<input type="text" id="pOverheadMemory" name="overhead_memory" class="form-control" value="{{ old('overhead_memory', 0) }}" />
<span class="input-group-addon">MiB</span>
</div>
<p class="text-muted small">Additional memory allocated to the container that doesn't go to the SERVER_MEMORY variable. Setting to <code>0</code> disables overhead memory.</p>
</div>
</div>
<div class="box-body row">
<div class="form-group col-xs-6">
<label for="pSwap">Swap</label>

View File

@@ -47,6 +47,14 @@
</div>
<p class="text-muted small">The maximum amount of memory allowed for this container. Setting this to <code>0</code> will allow unlimited memory in a container.</p>
</div>
<div class="form-group">
<label for="overhead_memory" class="control-label">Overhead Memory</label>
<div class="input-group">
<input type="text" name="overhead_memory" data-multiplicator="true" class="form-control" value="{{ old('overhead_memory', $server->overhead_memory) }}"/>
<span class="input-group-addon">MiB</span>
</div>
<p class="text-muted small">Additional memory allocated to the container that doesn't go to the SERVER_MEMORY variable. Setting to <code>0</code> disables overhead memory.</p>
</div>
<div class="form-group">
<label for="swap" class="control-label">Allocated Swap</label>
<div class="input-group">