Диск изменения используется длительным процессом

Выполнение из памяти всегда быстрее, чем диск с единственным недостатком, что Вы потеряете свои данные в питании. Однако Вы утверждаете, что можно повторно создать данные, если такая ситуация происходит. Так, я соглашаюсь, что необходимо использовать память, так как у Вас есть рты ее.

Тем не менее я вспоминаю что-то, что Knuth однажды заявил о данных. Что-то о не необходимости сделать любое вычисление вообще, если Вы структурируете свои данные правильно. Умные данные лучше, чем умный алгоритм.

Так, это могло бы быть благоразумно, чтобы Вы посмотрели на то, как можно реструктурировать базу данных и/или приложение для сокращения объема необходимой блокировки?

Предпринять шаги назад?

1
задан 9 April 2014 в 15:46
3 ответа

Если процесс использует какой-либо каталог для создания и удаления временных файлов, вы, вероятно, можете попытаться остановить его с помощью команды kill -STOP $ pid и загляните в / proc / $ pid / fd для открытых файловых дескрипторов.

Если ни один из открытых не открыт, вы можете безопасно изменить место монтирования, скопировать его файлы и продолжить работу с помощью kill -CONT $ pid .

Если есть еще какие-то открытые или не закрываемые процессы, вы можете попробовать перенести файловые дескрипторы с помощью GDB. Я попробовал это вручную, и это сработало, но я нашел сценарий, который может сделать это за вас: http://ingvar.blog.redpill-linpro.com/2010/07/10/changing-a-process- файл-дескриптор-на-лету /

Будьте осторожны, если процесс обменивается данными по сети, когда вы его останавливаете,

1
ответ дан 3 December 2019 в 18:46

Это полностью зависит от поведения вашего процесса при использовании его временного хранилища.

Если ваш процесс держит файл открытым на / mnt , вы не можете замените устройство, не вызывая, скорее всего, сбоя процесса каким-либо неопределенным образом, даже если вам удастся принудительно отключить устройство. Обычно процессы не ожидают, что устройства, на которых у них есть открытые файлы, исчезнут.

Если ваш процесс открывается, записывает и затем закрывает файлы на / mnt , вы можете избежать его остановки, размонтирования и повторного монтирования / mnt и перезапуска Это. Это зависит от вашей возможности остановить процесс, пока он не использует / mnt . Таким образом, вы можете

$ kill -STOP pid
$ lsof -p pid | grep /mnt
... then, if it has nothing open on /mnt ...
$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt
$ kill -CONT pid

Это не обязательно сработает, даже если вы остановите процесс без открытых файлов на / mnt , потому что вы могли прервать некоторую логику, которая полагается на неизменность / mnt ; что-то вроде

  • Проверьте, существует ли / mnt / wibble
  • Он существует! Давайте приготовимся открывать и читать из него
  • ... процесс останавливается, и другое устройство монтируется на / mnt ...
  • ... процесс перезапускается ...
  • о нет! / mnt / wibble не открывается!
  • Умереть ужасно
1
ответ дан 3 December 2019 в 18:46

Любая программа, выполняющая вычисления, которая продолжается несколько дней, должна быть спроектирована так, чтобы периодически фиксировать достаточное состояние на диске. Если перезапуск процесса означает, что вы теряете час времени обработки, это может быть нормально, но если вы потеряете больше, я бы назвал эту программу плохо разработанной.

Тем не менее, могут быть другие сценарии, где вы хотите, чтобы процесс продолжал работать дольше и иметь возможность заменить диск из-под него. В таких ситуациях вам следует рассмотреть возможность отделения файловой системы от физического носителя.

Возможные варианты:

  1. Использовать программный рейд
  2. Использовать другой уровень виртуальных блочных устройств (возможно, подходит LVM)
  3. Использовать файловую систему, которая сама может использовать несколько базовых устройств
1
ответ дан 3 December 2019 в 18:46

Теги

Похожие вопросы