VFS: достигнут максимальный размер файла 1231582 - PullRequest
5 голосов
/ 13 февраля 2011

Я использую ядро ​​Linux 2.6.36 и вижу некоторые случайные ошибки.Такие вещи, как

ls: error while loading shared libraries: libpthread.so.0: cannot open shared object file: Error 23

Да, моя система не может последовательно выполнить команду 'ls'.: (

Я заметил несколько ошибок в моем выводе dmesg:

# dmesg | tail
[2808967.543203] EXT4-fs (sda3): re-mounted. Opts: (null)
[2837776.220605] xv[14450] general protection ip:7f20c20c6ac6 sp:7fff3641b368 error:0 in libpng14.so.14.4.0[7f20c20a9000+29000]
[4931344.685302] EXT4-fs (md16): re-mounted. Opts: (null)
[4982666.631444] VFS: file-max limit 1231582 reached
[4982666.764240] VFS: file-max limit 1231582 reached
[4982767.360574] VFS: file-max limit 1231582 reached
[4982901.904628] VFS: file-max limit 1231582 reached
[4982964.930556] VFS: file-max limit 1231582 reached
[4982966.352170] VFS: file-max limit 1231582 reached
[4982966.649195] top[31095]: segfault at 14 ip 00007fd6ace42700 sp 00007fff20746530 error 6 in libproc-3.2.8.so[7fd6ace3b000+e000]

Очевидно, что ошибки file-max выглядят подозрительно, будучи сгруппированными вместе и недавними.

# cat /proc/sys/fs/file-max
1231582
# cat /proc/sys/fs/file-nr
1231712 0       1231582

Это также выглядит немного странно для меня, но дело в том, что я не могу открыть 1,2 миллиона файлов в этой системе. Я единственный, кто использует его, и он не виден никому за пределами локальной сети.

# lsof | wc
  16046  148253 1882901
# ps -ef | wc 
    574    6104   44260

Я видел документацию, в которой говорилось:

file-max & file-nr:

Ядро распределяет файловые дескрипторы динамически, но пока этого не происходит.освободите их снова.

Значение в file-max обозначает максимальное количество дескрипторов файлов, которое выделит ядро ​​Linux.Если вы получаете много сообщений об ошибках по поводу исчерпания дескрипторов файлов, вы можете захотеть увеличитьэто ограничение.

Исторически три значения в file-nr обозначали количество выделенных файловых дескрипторов, количество выделенных, но неиспользуемых файловых дескрипторов и максимальное количество файловых дескрипторов. Linux 2.6 всегда повторяетВ качестве числа свободных файловых дескрипторов задается 0 - это не ошибка, это просто означает, что количество выделенных файловых дескрипторов точно соответствует количеству используемых файловых дескрипторов.

Попытки выделить больше файловых дескрипторов, чем файловых.-max сообщаются с помощью printk, ищите «VFS: достигнут максимальный размер файла».

Мое первое прочтение о том, что ядро ​​в основном имеет утечку встроенного дескриптора файла, но я нахожув это очень трудно поверить.Это означало бы, что любую активную систему необходимо периодически перезагружать, чтобы освободить файловые дескрипторы.Как я уже сказал, я не могу поверить, что это будет правдой, поскольку для меня нормально, чтобы системы Linux работали месяцами (даже годами) одновременно.С другой стороны, я также не могу поверить, что в моей почти бездействующей системе открыто более миллиона файлов.

У кого-нибудь есть какие-либо идеи относительно исправлений или дальнейшей диагностики?Я мог бы, конечно, просто перезагрузить систему, но я не хочу, чтобы это повторялось каждые несколько недель.В качестве временной меры я закрыл Firefox, на который приходилось почти 2000 строк вывода lsof (!), Хотя у меня было открыто только одно окно, и теперь я могу снова запустить 'ls', но я сомневаюсь, что это исправитпроблема надолго.(редактировать: Упс, говорил слишком рано. К тому времени, как я закончил вводить этот вопрос, симптом был / вернулся)

Заранее спасибо за любую помощь.

1 Ответ

6 голосов
/ 05 марта 2011

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

Я закончил репостом вопроса об ошибке сервера вместо (эта статья)

* 1006На самом деле они ничего не смогли придумать, но я провел дополнительное расследование и в итоге обнаружил, что это подлинная ошибка в NFSv4, в частности код блокировки на стороне сервера.У меня был клиент NFS, который запускал скрипт мониторинга каждые 5 секунд, используя rrdtool для записи некоторых данных в файл, смонтированный NFS.Каждый раз, когда он запускался, он блокировал файл для записи, и сервер выделял (но ошибочно никогда не выпускал) дескриптор открытого файла.Этот сценарий (плюс другой, который запускался реже) приводил к потреблению около 900 открытых файлов в час, а через два месяца он достиг предела.

Возможно несколько решений: 1) Вместо этого используйте NFSv3.2) Прекратите запуск сценария мониторинга.3) Храните результаты мониторинга локально, а не в NFS.4) Дождитесь патча для NFSv4, который исправит это (Брюс Филдс действительно прислал мне патч, чтобы попробовать, но у меня не было времени)

Я уверен, что вы можете придумать другие возможные решения.

Спасибо за попытку.

...