Системный кеш постоянно растет при стресс-тестировании серверного приложенияLinux

Ответить
Anonymous
 Системный кеш постоянно растет при стресс-тестировании серверного приложения

Сообщение Anonymous »

Я проводил стресс-тестирование своего .NET-приложения, использующего PostgreSQL для поиска утечек памяти. Приложение очень стабильно с точки зрения использования памяти — использование памяти зависит только от количества одновременных подключений.
Однако я заметил, что использование ОЗУ, помеченное как кеш, со временем медленно растет, пока не заполнится, вызывая нехватку ОЗУ (кэш не освобождается).
Я тестирую свое приложение, отправляя 1000 одновременных POST-запросов к серверной части, которая настроена с пулом до 100 соединений PostgreSQL. В PostgreSQL для параметра Shared_buffers установлено значение 128 МБ и максимум 100 подключений.
Я не обнаружил большого использования памяти ни процессом .NET, ни моим простым приложением Node, которое я использую для тестов.
Тест просто создает множество одновременных HTTPS-соединений:
Тест представляет собой простой https-клиент, пытающийся установить множество одновременных подключений.

Код: Выделить всё

while (true) {
await stressREST(token, url, msg, 1000);
}

Код: Выделить всё

const httpsAgent = new https.Agent({
keepAlive: true,
maxSockets: 100,
maxTotalSockets: 100,
});

const client = axios.create({
httpsAgent,
timeout: 10_000,
});

export default async function stressREST(
token: string,
url: string,
content: object,
times: number
) {
const promises = [];

for (let i = 0; i < times; i++) {
promises.push(
client.post(url, content, {
headers: { Authorization: `Bearer ${token}` },
})
);
}

await Promise.all(promises);
console.log(times, "requests done");
}
Я добавил HTTPS-клиент, потому что думал, что серверная часть не успевает за соединениями, а Node или сервер кэшируют запросы, но это не помогло. Когда я останавливаю процесс Node, высокий уровень использования кэша по-прежнему сохраняется в оперативной памяти даже после остановки моего бэкэнда. Использование SetInterval() вместо цикла while true тоже не помогло.
Я также установил значение shmmax ядра на 8 ГБ, но это не имело никакого значения.
Я использую Fedora 43 с 32 ГБ ОЗУ.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ackend-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»