Не удалось открыть /proc/self/stat

Это вопрос о поведении centos 7. В частности, система / proc внутри centos 7 и ее поведение при программном доступе к ней.

У меня есть код, который периодически читает / proc / self / stat на centos 7.

Код написан на C++.

Это работает нормально уже более года, но сегодня на десятках серверов в разных часовых поясах одновременно мой код не смог открыть /proc/self/stat.

Мой код не обрабатывал ошибку при открытии / proc / self / stat, что, очевидно, я должен исправить, но я действительно хотел бы понять, как возможно, что / proc / self / stat не доступен и как это может случиться со всеми серверами в то же время.

Хотя я не верю, что мой вопрос касается ОС, а не C++, вот мой код:

static std::vector<std::string> read_stat_file(const std::string &fn) {
    /*
     * Returns list of strings by space delimiter.
     */
    std::vector<std::string> s_buffer;
    {
        std::ifstream stat(fn);

        for (std::string token; std::getline(stat, token, ' ');) {
            s_buffer.push_back(token);
        }
        stat.close();
    }
    return s_buffer;
}

Функция вызывается каждую секунду из таймера asio следующим образом:

auto s_buffer = read_stat_file("/proc/self/stat");
...
//Failed to check s_buffer length
...
auto new_user_time = std::stoull(s_buffer[13]); //Crash

Код явно неисправен. Он должен был проверить, может ли файл быть открыт, и он должен проверить длину возвращенного массива перед его использованием.

Мой главный вопрос о /proc/self/stat. Насколько я понимаю, это виртуальный файл, который создается по запросу. Поэтому, когда наш код открывается, это файл, который генерируется операционной системой тут же. Я хотел бы понять, почему через год это внезапно может выйти из строя на всех наших производственных машинах одновременно по всему земному шару (в пределах 3-минутного окна).

Меня беспокоит то, что ОС делает что-то еще, что может повлиять на производительность других компонентов нашей системы, и есть что-то, что мы должны отключить.

Итак, мой вопрос: "Как это возможно, что все серверы одновременно терпят неудачу при попытке открыть /proc/self/stat?".

0 ответов

Другие вопросы по тегам