Не удалось открыть /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?".