NFS не сохраняет хвосты файлов при сбое программы

Программа работает параллельно на нескольких процессорах и записывает журналы на центральный хост через NFS в RH7.3 или SUSE 11.3. Если программа выходит из строя или зависает, тогда теряются хвосты файлов журнала, и нам не хватает информации о местонахождении и причине сбоя.

Синхронизация Shell не влияет. Режим монтажа async по серьезной причине: в случае режима синхронизации время загрузки исходных данных и результатов разгрузки увеличивается в 10 раз, от минут до часов. Иногда flush() вставленный в программу, может помочь, но это трудно сделать, когда местоположение неизвестно наверняка.

Итак, возможно ли заставить NFS-клиента безошибочно очищать свои буферы, когда процесс завершается, как бы ни были?

Как только выход попадет в буфер клиента NFS, он должен попасть на сервер – я боюсь, что вы потеряете данные в обычных потоковых буферах. Попробуйте изменить свойства буферизации с помощью setvbuf() .

Возможно, вы также захотите включить coredumps для аварийного приложения, чтобы вы могли что-то отлаживать – см. https://stackoverflow.com/questions/2919378/how-to-enable-core-dump-in-my-linux-c- программы и prctl(PR_SET_DUMPABLE, ...)