Недавно я столкнулся с этой проблемой на одной из наших производственных машин. Фактическая проблема с PHP выглядела так:
fopen (dberror_20110308.txt): не удалось открыть поток: слишком много открытых файлов
Я использую стек LAMP вместе с кешем памяти на этой машине. Я также запускаю на этой машине несколько приложений Java. Хотя я увеличил ограничение на количество файлов, которые могут быть открыты, до 10000 (с 1024), я действительно хотел бы знать, есть ли простой способ отслеживать это (количество файлов, открытых в любой момент) в качестве метрики. Я знаю, что lsof - это команда, которая выводит список дескрипторов файлов, открытых процессами. Интересно, есть ли другой лучший (с точки зрения отчетов) способ отслеживания этого, например, nagios.
Вы можете посмотреть / proc / sys / fs / file-nr
cat /proc/sys/fs/file-nr
3391 969 52427
| | |
| | |
| | maximum open file descriptors
| total free allocated file descriptors
total allocated file descriptors
Общее количество выделенных файловых дескрипторов означает количество файловых дескрипторов, выделенных с момента загрузки. Это можно рассматривать как высшую точку максимального количества файлов, открытых одновременно. Когда они освобождаются, они переходят во второй столбец, поэтому количество открытых файлов в любой момент времени будет от столбца 1 до столбца 2.
/proc/sys/fs/file-nr
показывает количество файловых дескрипторов, открытых для всей системы, и максимальное количество файловых дескрипторов. Для отдельных процессов вы можете посмотреть /proc/$pid/fd/*
.
/ proc / sys / fs / file-nr дает вам общее количество открытых файлов в системе (и на это есть ограничение), но ваша текущая проблема - это количество открытых файлов. за процесс
Каждый открытый файл представлен файлом в / proc /пид/ fd
Итак, вам просто нужно определить pid для процессов, открывающих много файлов (похоже, проблема в вашей базе данных) и подсчитать соответствующие файлы.
Но мне кажется немного странным, что это БД, в которой слишком много открытых файлов. И не удается открыть txt файл?