#node.js #express #typeorm
#node.js #экспресс #typeorm
Вопрос:
Недавно я запускал некоторый нагрузочный тест для нашего js api express node с помощью typeorm. Тест очень прост, я использую цикл, чтобы попасть в конечную точку get food 3000 раз.
что-то вроде
for (let i = 0; i < 3000; i ) {
fetch("http://url/food").then(resp=>resp.text()).catch(err=>console.log(err));
}
Я получил много ошибок ECONNRESET (зависание сокета). Но после этого я больше не могу попасть в эту конечную точку. Я все еще могу попасть в конечную точку индекса (для которой не требуется подключение к БД). Но кроме этого, вызов api просто зависает. Я думал, что сервер не работает, но я все еще могу получить доступ к конечной точке index (без подключения к БД).
Я предполагаю, что это может быть связано с подключением к typeorm db, возможно, мертвые вызовы api все еще поддерживают соединения с БД. Кто-нибудь видел подобное поведение раньше? Любая помощь будет оценена.
конечная точка индекса
const router = Router();
router.get("/", function(req: Request, res: Response, next: NextFunction) {
res.send("food index!!");
});
export default router;
конечная точка питания
const router = Router();
router.get("/", getFoodController);
export default router;
getFoodController выдаст соединение с typeorm db
Когда я проверил журнал, я увидел множество
GET /food -- ms --
Комментарии:
1. Не могли бы вы опубликовать
getFoodController
код здесь?2. Это разумно. Поскольку пул соединений между typeorm и базой данных ограничен, каждый запрос будет использовать поток подключения из пула для запроса, а затем восстанавливать соединение до получения ответа. Когда количество запросов превышает количество соединений, которые могут быть использованы, произойдет застревание.