Рубрики
Uncategorized

Как дескрипторы файлов могут принести ваше обслуживание.

Путешествие из ОС Linux в ваше приложение и поддержание вашего приложения в долгосрочной перспективе. Tagged с Java, Linux, DevOps, Showdev.

За прошедший год я закончил основные основы Linux Foundation курса администрирования Linux. Сегодня я собираюсь сосредоточиться на файловых дескрипторах и как ваше приложение создает их, а Должен Закрыть их.

Начнем с очень высокого уровня определения того, как os linux видит свой мир.

Все в бегущей системе Linux — это файл.

Файловый дескриптор — это файл, который ядро Linux создает и удаляет для каждого файла, открытого и закрытого процессом.

Ядро Linux позволяет конечное количество файловых дескрипторов!

Давайте посмотрим на это в действии. Начните свое приложение и получите PID.

java -jar app.jar
ps -ef | grep app.jar

Теперь CD в каталог процессов и сделайте LS.

cd /proc/3535
ls -al

Это все информация о вашем запуске приложении, которое нуждается в ядре.

Давайте сосредоточимся на файловых дескрипторах каталог

ls -al /proc/3535/fd
ls -al /proc/3535/fd | wc -l

Вы увидите, что есть номер открытых дескрипторов файлов.

Используйте ваше приложение для немного и вернитесь к этому каталогу и снова выполните команду выше.

Сколько дескрипторов сейчас сейчас?

Вернитесь в свое приложение снова и используйте его еще.

Сколько там сейчас?

Если этот номер продолжает идти вверх, вы направляетесь к неприятностям!

В конце концов вам приложение не сможет ничего делать, поскольку он больше не может открыть файловые дескрипторы.

Из моего опыта основные виновники — поток ввода/вывода Отказ

Итак, как мы решаем это?

Легкий!

Закройте ваши потоки.

Попробовать ресурсы для спасения. Откройте все, что вы транслируете в блоке TRY-STRECLES, и JVM будет обрабатывать закрытие пара для вас

//...

    try (InputStream data = new InputStream()){
        // ...
    }

У Python есть похожая концепция

# ...

    with open('mine.txt', r) as f:
        # ...

Я уверен, что другие языки имеют ту же концепцию, поэтому не стесняйтесь комментировать его, и я буду обновлять сообщение.

Итак, Всегда закрывайте ваши потоки, чтобы ваше приложение в конечном итоге не упадет.

Оригинал: «https://dev.to/thomaswdmelville/how-file-descriptors-can-bring-your-service-down—17ke»