Не удалось открыть базу данных из-за недоступности файлов, нехватки памяти или места на диске
Обновлено: 21.11.2024
В /var/log/messages наблюдаются следующие ошибки:
Аналогичная вилка не удалась: ошибка "Ресурс временно недоступен" регистрируется и другими процессами:
Разрешение
Могут быть различные причины, по которым процессы не могут разветвляться, и, таким образом, это означает, что существуют также различные решения:
-
Возможно, запущены неправильно работающие службы или процессы. Всегда подтверждайте, что в вашем сценарии использования ожидается количество процессов, потоков или потребления памяти, прежде чем повышать какие-либо ограничения. Повышение лимитов без устранения основной причины утечки процесса, потока или памяти может привести к худшим и непредсказуемым последствиям.
Когда система сталкивается с ограничением количества процессов, увеличьте значение nproc в /etc/security/limits.conf или /etc/security/limits.d/90-nproc.conf в зависимости от версии RHEL. Лимит может быть увеличен для конкретного пользователя или для всех пользователей. Например, вот пример файла /etc/security/limits.d/90-nproc.conf.
Когда система сталкивается с ситуацией нехватки памяти, найдите приложение с утечкой памяти. Рассмотрите возможность запуска valgrind для приложения, которое сообщит обо всех обнаруженных утечках памяти, или обратитесь к поставщику приложения.
В RHEL6 используйте контрольные группы для ограничения доступа к ресурсам для процессов. См. отдельную статью базы знаний о контрольных группах.
Проверьте общее количество потоков и процессов, запущенных на сервере:
kernel.pid_max должен быть больше, чем общее количество одновременных потоков и процессов.
На сервере может работать база данных Oracle. Руководство по установке Oracle обычно требует некоторых изменений в /etc/security/limits.conf, /etc/profile и других файлах, связанных с количеством процессов. Дважды проверьте, были ли в вашей системе внесены необходимые изменения. Используйте для этого руководство по установке Oracle для вашей версии Oracle и заполните раздел, относящийся к изменениям в /etc/security/limits.conf и других файлах. Такая статья должна быть в Oracle Metalink, например:
- Примечание 339510.1. Требования для установки СУБД Oracle 10gR2 на RHEL 4 на AMD64/EM64T
- Примечание 353529.1. Требования для установки 64-разрядной версии Oracle 9iR2 на RHEL 4 x86-64 (AMD64/EM64T)
Основная причина
Причин, по которым процессы не могут разветвляться, могут быть разные причины:
- Выполняется неправильная служба или процесс, который потребляет больше ресурсов, чем ожидалось.
- Системе не удалось создать новые процессы из-за ограничений, установленных для nproc в /etc/security/limits.conf.
- В системе закончилась память, и новые процессы не удалось запустить, поскольку им не удалось выделить память.
- Нет доступного идентификатора для назначения новому процессу. Должно быть доступно уникальное значение меньше, чем kernel.pid_max.
Этапы диагностики
-
Проверьте с помощью sar, была ли использована вся память или было создано большое количество процессов.
Недостаток системных ресурсов может привести к остановке некоторых системных демонов. Это будет отображаться как сегментация приложений. Обратите внимание, что в случае утечки памяти первое приложение, вызвавшее segfault, не обязательно является тем, которое вызвало утечку памяти.
Чтобы сравнить использование процессов с тем, что разрешено для пользователя, проверьте вывод ulimit -u на предмет ограничения, установленного для конкретного пользователя, и сравните с количеством процессов, запущенных пользователем.
Вы можете запустить приведенную ниже команду, чтобы узнать количество процессов, открытых для каждого пользователя, и сравнить, превышено ли это ограничение с тем, что указано в /etc/security/limits.conf или /etc/security/limits.d/*.
Увеличьте значение параметра "nproc" в файле /etc/security/limits.conf.
Если в системе работает база данных Oracle, убедитесь, что файлы '/etc/security/limits.conf', '/etc/profile' и '/etc/pam.d/login' изменены в соответствии с Руководством по установке Oracle для установленная версия Oracle. Проверьте и выполните шаги из следующего раздела:
- Настройте пользовательский процесс Unix и ограничения на количество файлов
Эти шаги могут быть аналогичны следующим примерам (при условии, что пользователь Unix "oracle" выполнит установку и запустит базу данных):
Добавьте следующие настройки в /etc/security/limits.conf:
Добавьте или отредактируйте следующую строку в файле /etc/pam.d/login, если она еще не существует:
Добавьте следующие строки в /etc/profile :
Это решение является частью программы ускоренной публикации Red Hat, предоставляющей огромную библиотеку решений, созданных инженерами Red Hat для поддержки наших клиентов. Чтобы дать вам необходимые знания, как только они станут доступны, эти статьи могут быть представлены в необработанном и неотредактированном виде.
4 комментария
Как насчет увеличения значения pid_max в /proc/sys/kernel/pid_max?Это помогло мне несколько раз исправить подобные проблемы.
Hola, anexamos el resultado de la ejecución de los comandos indicados
unevm-dfuseplat01 | 15:33:24 / $ps -ef | предохранитель | grep -v grep предохранитель 1293 1 0 Oct27 ? 00:03:34 /opt/fuse/jboss-fuse-6.1.0.redhat-379/bin/fuse-wrapper /opt/fuse/jboss-fuse-6.1.0.redhat-379/etc/предохранитель-обертка. conf wrapper.syslog.ident=fuse wrapper.pidfile=/opt/fuse/jboss-fuse-6.1.0.redhat-379/data/fuse.pid wrapper.daemonize=TRUE wrapper.lockfile=/var/lock/subsys/ предохранитель
предохранитель 1847 1293 0 27 октября ? 00:10:31 java -Dkaraf.home=/opt/fuse/jboss-fuse-6.1.0.redhat-379 -Dkaraf.base=/opt/fuse/jboss-fuse-6.1.0.redhat-379 -Dkaraf .data=/opt/fuse/jboss-fuse-6.1.0.redhat-379/data -Dkaraf.etc=/opt/fuse/jboss-fuse-6.1.0.redhat-379/etc -Dcom.sun.management .jmxremote -Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true -Djava.endorsed.dirs=%JAVA_HOME%/jre/lib/endorsed:%JAVA_HOME%/lib/endorsed:/opt/fuse/jboss-fuse-6.1. 0.redhat-379/lib/одобрено -Djava.ext.dirs=%JAVA_HOME%/jre/lib/ext:%JAVA_HOME%/lib/ext:/opt/fuse/jboss-fuse-6.1.0.redhat-379 /lib/ext -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -Djava.library.path=/opt/fuse/jboss-fuse-6.1.0.redhat-379/lib/ -classpath /opt /fuse/jboss-fuse-6.1.0.redhat-379/lib/karaf-wrapper.jar:/opt/fuse/jboss-fuse-6.1.0.redhat-379/lib/karaf.jar:/opt/fuse /jboss-fuse-6.1.0.redhat-379/lib/karaf-jaas-boot.jar:/opt/fuse/jboss-fuse-6.1.0.redhat-379/lib/karaf-wrapper-main.jar — Dwrapper.key=eLM9uQ6Gu2nB8MZd -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31 000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=1293 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid= 2 org.apache.karaf.shell.wrapper.Main
euribe @ unevm-dfuseplat01 | 15:33:24 / $ps -eLf | группа 1293 | wc -l
1025
euribe @ unevm-dfuseplat01 | 15:33:35 / $ps -eLf | группа 1047 | wc -l
1
euribe @ unevm-dfuseplat01 | 15:33:40 / $
euribe @ unevm-dfuseplat01 | 15:33:40 / $ ulimit -u
1024
euribe @ unevm-dfuseplat01 | 15:37:05 / $
Даже если на вашем компьютере достаточно оперативной памяти, Microsoft Access может сообщить об ошибке «Недостаточно памяти». Эта ошибка обычно не связана с нехваткой памяти. Мы обнаружили четыре случая возникновения этой ошибки в Access:
Документация по связанным таблицам и запросам на основе связанных таблиц
Существует известная ошибка Access, из-за которой программы документирования, такие как Total Access Analyzer и встроенный документатор базы данных Access, могут столкнуться с ошибками Out of Memory. Кажется, в Access происходит утечка памяти, которая возникает при проверке всех свойств полей в связанных (присоединенных) таблицах и запросах, которые ссылаются на связанные таблицы. В JET 3.50 эта ошибка приводит к завершению доступа с ошибкой недопустимой страницы. В системах, которые были обновлены до версии JET 3.51, возникает ошибка «Недостаточно памяти».
Чтобы определить, является ли это причиной проблемы, запустите встроенный компонент Database Documenter для всех ваших таблиц и запросов. Если Database Documenter также вызывает ошибку «Недостаточно памяти», проблема заключается в Jet Engine, а не в нашей программе. Вам следует пожаловаться в Microsoft, а пока есть несколько способов обойти эту проблему в Access 97:
Решение 1. Не документируйте таблицы и запросы
Конечно, этой проблемы можно избежать, если не выбирать таблицы или запросы для документации. Это полезно, если вас интересуют только такие вещи, как анализ модулей, но не очень полезно, если вам нужна информация о ваших таблицах и запросах. (Вы все еще можете столкнуться с этой проблемой, если вы документируете формы и отчеты, которые ссылаются на связанные таблицы и запросы).
Решение 2. Отключите проверку свойств полей вашей базы данных
- Запустите Total Access Analyzer и нажмите «Документ» в главном меню.
- На первой странице мастера документации снимите флажки "Свойства поля таблицы" и "Число записей таблицы".
- Иногда это работает, но все равно может вызвать ошибку, особенно если у вас большое количество таблиц (сотни).
Решение 3. Удалите связанные таблицы и импортируйте их в свою базу данных
Чтобы «преобразовать» связанные таблицы в собственные таблицы Access в вашей базе данных:
- Создайте копию своей базы данных
- Удалить связанные таблицы
- В меню «Файл» выберите «Получить внешние данные | Импортируйте, выберите базу данных, содержащую ранее связанные таблицы, выделите их и нажмите "ОК".
Это решение сработало во многих ситуациях, но в некоторых базах данных все еще может дать сбой. Поскольку вы можете увидеть проблему во встроенном средстве документирования базы данных и глубоко в самом Access, мы в FMS не смогли найти решение.
База данных повреждена
Возможно, ваша база данных повреждена. Просто восстановите и уплотните базу данных.Если это не сработает, более надежный процесс — создать новую базу данных и импортировать все объекты из исходной. Однако если форма или отчет повреждены, возможно, потребуется создать их заново, поскольку они необратимо повреждены.
Недостаточно места на диске для файла подкачки Windows
Эта ошибка может возникнуть, если у вас недостаточно места на диске для Microsoft Windows или Windows NT для управления файлом подкачки. Открытие других приложений во время работы Access и приложения Total Access также может вызвать эту проблему. В этом случае закройте другие программы, перезагрузите компьютер и снова запустите надстройку.
В качестве альтернативы вы должны освободить место на диске, используемом Windows для файла подкачки, и/или увеличить размер файла подкачки. Выполнение этих действий может вызвать потенциальные проблемы и не поддерживается FMS. Обратитесь к документации Microsoft Windows или Microsoft для получения подробной информации о настройке файла подкачки. Мы рекомендуем 100 МБ свободного места на диске в качестве общего правила, чтобы предотвратить эту ошибку.
Проблемы с конфигурацией системы
Есть проблемы с конфигурацией, которые влияют на то, как компьютер управляет памятью, и могут способствовать возникновению этой ошибки. Ниже приведены некоторые временные изменения, которые вы можете внести в свою систему, и другие действия, которые вы можете предпринять, чтобы попытаться решить или предотвратить эту и другие связанные с ней проблемы (вам потребуется перезапустить Windows после внесения любых изменений в конфигурацию системы):
Устранение сбоев никогда не доставляет удовольствия, особенно если MySQL не сообщает о причине сбоя. Например, когда появляется проблема с памятью MySQL. В 2012 году Петр Зайцев написал в блоге статью «Устранение неполадок с использованием памяти MySQL» с множеством полезных советов. С новыми версиями MySQL (5.7+) и performance_schema у нас появилась возможность гораздо проще устранять неполадки с выделением памяти MySQL.
Ошибка памяти MySQL
Прежде всего, есть 3 основных случая, когда MySQL дает сбой из-за нехватки памяти:
- MySQL пытается выделить больше памяти, чем доступно, потому что мы специально сказали ему это сделать. Например: вы неправильно установили innodb_buffer_pool_size. Это очень легко исправить.
- На сервере есть другие процессы, которые выделяют оперативную память. Это может быть приложение (java, python, php), веб-сервер или даже резервная копия (например, mysqldump). Когда источник проблемы определен, устранить ее несложно.
- Утечки памяти в MySQL. Это наихудший сценарий, и нам необходимо устранить неполадки.
С чего начать устранение утечек памяти в MySQL
Вот с чего мы можем начать (при условии, что это сервер Linux):
Часть 1. Проверка ОС Linux и конфигурации
- Определите сбой, проверив журнал ошибок mysql и файл журнала Linux (например, /var/log/messages или /var/log/syslog). Вы можете увидеть запись о том, что OOM Killer убил MySQL. Всякий раз, когда MySQL был убит OOM, «dmesg» также показывает подробности об обстоятельствах, связанных с этим.
- Проверьте доступную оперативную память:
- бесплатно – г
- cat/proc/meminfo
- Проверьте, какие приложения используют оперативную память: «top» или «htop» (см. резидентную и виртуальную память)
- Проверьте конфигурацию mysql: проверьте /etc/my.cnf или вообще /etc/my* (включая /etc/mysql/* и другие файлы). MySQL может работать с другим my.cnf (запустите ps ax | grep mysql )
- Запустите vmstat 5 5, чтобы узнать, читает ли система/записывает ли она через виртуальную память и выполняет ли она подкачку.
- Для непроизводственной среды мы можем использовать другие инструменты (такие как Valgrind, gdb и т. д.) для изучения использования MySQL.
Часть 2. Проверка внутри MySQL
Теперь мы можем проверить вещи внутри MySQL, чтобы найти потенциальные утечки памяти MySQL.
MySQL выделяет память множеством мест. Особенно:
- Кэш таблицы
- Performance_schema (выполнить: показать статус engine performance_schema и посмотреть на последнюю строку). Это может быть причиной для систем с небольшим объемом оперативной памяти, т. е. 1 ГБ или меньше.
- InnoDB (запустите show engine innodb status и проверьте раздел буферного пула, память, выделенную для buffer_pool и связанных кэшей)
- Временные таблицы в ОЗУ (найдите все таблицы в памяти, запустив: select * from information_schema .tables where engine = 'MEMORY' )
- Подготовленные операторы, если они не освобождены (проверьте количество подготовленных команд с помощью команды освобождения, запустив команду show global status, например ‘ Com_prepare_sql ’; show global status as ‘ Com_dealloc_sql ’ )
Хорошая новость: начиная с MySQL 5.7 у нас есть выделение памяти в performance_schema. Вот как мы можем это использовать
-
Во-первых, нам нужно включить сбор метрик памяти. Выполнить:
mysql > выберите event_name, current_alloc, high_alloc из memory_global_by_current_bytes, где current_count > 0;
Самый большой объем ОЗУ обычно занимает буферный пул, но ~3 ГБ в хранимых процедурах кажется слишком большим.
Согласно документации исходного кода MySQL, sp_head представляет один экземпляр хранимой программы, которая может быть любого типа (хранимая процедура, функция, триггер, событие). В приведенном выше случае у нас есть потенциальная утечка памяти.
Кроме того, мы можем получить общий отчет по каждому событию более высокого уровня, если хотим увидеть с высоты птичьего полета, что ест память:
Я надеюсь, что эти простые шаги помогут освободить память в MySQL.
Вам также может понравиться
По мере роста ваших приложений должна расти и ваша база данных. Следовательно, производительность и доступность базы данных жизненно важны для успеха вашего бизнеса. Когда ваша команда недостаточно хорошо понимает производительность базы данных, результатом могут быть проблемы с производительностью приложений. Недостаток знаний также может помешать своевременному решению проблемы. В статье Производительность при масштабировании: поддержание базы данных в рабочем состоянии мы обсуждаем, что следует учитывать при планировании масштабируемой производительности.
Начинающим организациям и малым предприятиям требуется проверенная архитектура базы данных, которая не только проста в настройке, но и включает в себя отказоустойчивость и базовые компоненты обеспечения непрерывности. Наш бриф описывает такое решение. Решение основано на Percona Server для MySQL и идеально подходит для локальных сред.
Ссылки на дополнительные ресурсы, которые могут представлять интерес
- Веб-семинар: Устранение сбоев MySQL под руководством моей коллеги Светы Смирновой
- Электронные книги: Практическая оптимизация производительности MySQL, часть 1, часть 2 и часть 3, написанные Петром Зайцевым и мной, Александром Рубиным
- Технический документ: Контрольный список для предотвращения распространенных, но опасных проблем с MySQL
Связанные
Автор
Александр присоединился к Percona в 2013 году. Александр работал с MySQL с 2000 года в качестве администратора баз данных и разработчика приложений. До прихода в Percona он более 7 лет консультировал MySQL в качестве главного консультанта (начал с MySQL AB в 2006 году, затем с Sun Microsystems, а затем с Oracle). Он помог многим клиентам разработать большие, масштабируемые и высокодоступные системы MySQL и оптимизировать производительность MySQL. Александр также помогал клиентам проектировать хранилища больших данных с помощью Apache Hadoop и связанных технологий.
Это может быть проблема конкретного проекта или проблема с конфигурацией системы.
Чтобы решить эту проблему, вы можете попробовать выполнить перечисленные ниже действия.
Попробуйте уменьшить объем памяти, выделяемой другим приложениям:
- Выберите After Effects CC > «Установки» > «Память».
- Измените объем ОЗУ, зарезервированный для других приложений, и нажмите "ОК" .
Изменение ОЗУ, зарезервированного для других приложений
Очистить память и кэш диска:
- Выберите «Правка» > «Очистить» > «Вся память и дисковый кэш».
- Чтобы удалить все файлы из кеша диска, нажмите OK .
Удаление медиафайлов и кеша диска
Еще один способ очистить кеш носителя и диска:
- Выберите After Effects CC > «Установки» > «Кэш мультимедиа и диска».
- В диалоговом окне «Настройки» нажмите «Очистить кэш диска», чтобы очистить кэш диска, и «Очистить базу данных и кэш», чтобы очистить кэш мультимедиа.
Очистка носителя и дискового кэша
Если Mercury Transmit включен, отключите его в меню «Настройки» > «Просмотр видео».
Отключение Mercury Transmit
Переключить трассировку лучей на ЦП:
- Если вы использовали модуль 3D-рендеринга с трассировкой лучей, выберите «Настройки» > «Предварительный просмотр» .
- В диалоговом окне «Настройки» нажмите «Информация о графическом процессоре» и установите для параметра «Трассировка лучей» значение «ЦП».
Переключение трассировки лучей на ЦП
Удалите все сторонние плагины.
Местоположение MacOS
Расположение Windows
C:\Program Files\Adobe\Adobe Media Encoder CC 2017\Support Files (для внешних подключаемых модулей)
Создайте прекомпозицию существующей композиции. Чтобы создать предварительную композицию, выберите все треки на временной шкале и щелкните правой кнопкой мыши. В раскрывающемся меню выберите Предварительно составить .
Сбросить настройки After Effects. Убедитесь, что After Effects закрыт на вашем компьютере (выполняя шаги).
MacOS
- Перейдите на рабочий стол и нажмите GO в строке меню.
- В раскрывающемся списке выберите «Перейти к папке» и введите следующий путь: /library/preferences/adobe
- В списке приложений выберите After Effects и переименуйте его в «After Effects1».
- Перейдите в папку «Документы» на своем компьютере и откройте папку Adobe.
- В папке Adobe переименуйте папку After Effects в «After Effects1».
Окна
- В диалоговом окне "Выполнить" (клавиша Win+R) введите %appdata% .
- Откройте папку Adobe.
- Переименуйте папку After Effects в After Effects1.
- Закройте окно и откройте папку «Документы».
- В папке Adobe откройте папку After Effects и переименуйте ее в «After Effects1».
Проверьте проблему с созданием композиции:
- Создайте пустой проект.
- Включите Caps Lock и попробуйте импортировать неисправный проект.
- Открывайте композиции одну за другой и переключайте Caps Lock, чтобы проверить, какая композиция создает проблему.
Убедитесь, что файлы Illustrator находятся в автономном режиме, или попробуйте преобразовать файлы Illustrator в слои Shape.
Читайте также: