Приложение C++ с mmap убивает ядро? (kernel panic with mmap)

На самом деле я предпочитаю использовать диспетчер пакетов aptitude для установки / устранения зависимостей пакетов. Вы устанавливаете его с помощью:

sudo apt-get install aptitude

Команды очень похожи на apt / apt-get .

aptitude кажется более умным, чем другие инструменты, работающие с зависимостями. Он также показывает меню с альтернативами для работы с процедурами удаления / установки и показывает альтернативы (если и когда они существуют), когда вы отказываетесь от первого выбора.

$sudo aptitude purge libasound2
The following packages will be REMOVED:  
  libasound2{p} libasound2-data{u} 

The following packages have unmet dependencies:
 openjdk-8-jre : Depends: libasound2 (>= 1.0.16) but it is not going to be installed
The following actions will resolve these dependencies:

Remove the following packages:              
1)     openjdk-8-jre [8u111-b14-3 (now, testing)]



Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

     Keep the following packages at their current version:    
1)     libasound2 [1.1.2-1 (now, testing)]                
2)     libasound2-data [1.1.2-1 (now, testing)]           

Accept this solution? [Y/n/q/?] 

Из вики-страницы debian Aptitude :

Aptitude имеет ряд полезных функций, в том числе:

  • синтаксис, подобный mutt, для гибкого сопоставления пакетов, отметьте
  • пакеты как " автоматически устанавливается »или« устанавливается вручную », так что пакеты могут быть автоматически удалены, когда они больше не требуются
  • красочный предварительный просмотр действий, которые будут предприняты
  • dselect-подобная постоянство действий пользователя
  • возможность извлечения и отображения журнал изменений Debian большинства пакетов
  • AptCLI-подобный (= apt-get + apt-cache) режим командной строки ("aptitude install foo")
  • Основанный на оценках и (обычно) более умный преобразователь зависимостей, чем apt-get

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

Вы устанавливаете его с помощью:

sudo apt-get install debfoster

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

Из HOWTO: использование debfoster на практике

debfoster - удаление ненужных пакетов Debian

debfoster поддерживает список установленных пакетов, которые были явно запрошены, а не установлены как зависимость. Аргументы совершенно необязательны, debfoster может вызываться как таковой после каждого запуска dpkg и / или apt-get.

В качестве альтернативы вы можете использовать debfoster для установки и удаления пакетов, указав пакеты в командной строке. Пакеты с суффиксом - удаляются, а пакеты без суффикса устанавливаются.

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

$sudo debfoster

smem is keeping the following 27 packages installed:
  blt fonts-lyx libglade2-0 libjs-jquery libjs-jquery-ui liblapack3 libtk8.6 libwebp6
  libwebpdemux2 libwebpmux2 libxss1 python-cairo python-cycler python-dateutil
  python-glade2 python-gobject-2 python-gtk2 python-imaging python-matplotlib
  python-matplotlib-data python-numpy python-pil python-pyparsing python-tk python-tz
  tk8.6-blt2.5 ttf-bitstream-vera
Keep smem? [Ynpsiuqx?], [H]elp: Y

imvirt is keeping the following 9 packages installed:
  imvirt-helper libemail-date-format-perl libfile-slurp-perl libfile-which-perl
  libimvirt-perl libmime-lite-perl libmime-types-perl libmodule-find-perl pciutils
Keep imvirt? [Ynpsiuqx?], [H]elp: Y

linux-image-4.8.0-1-amd64-unsigned is keeping the following 9 packages installed:
  busybox firmware-linux-free initramfs-tools initramfs-tools-core irqbalance
  klibc-utils libklibc libnuma1 linux-base
Keep linux-image-4.8.0-1-amd64-unsigned? [Ynpsiuqx?], [H]elp: Y

faketime is keeping the following 1 packages installed:
  libfaketime
Keep faketime? [Ynpsiuqx?], [H]elp: N

haveged is keeping the following 1 packages installed:
  libhavege1
Keep haveged? [Ynpsiuqx?], [H]elp: Y
Keep libfaketime? [Ynpsiuqx?], [H]elp: N
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  faketime* libfaketime*
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 127 kB disk space will be freed.
Do you want to continue? [Y/n]

2
17.02.2016, 10:37
2 ответа

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

Я бы поискал аппаратную проблему и внимательно посмотрел на любые подсказки в системных журналах, например /var/log/kernel.log . В качестве эксперимента я бы попытался сопоставить файл того же размера с другой файловой системой, потому что диск является наиболее вероятным компонентом, который выйдет из строя.

Возможно вы указали ошибку в ядре. Быстрый поиск обратной записи и panic обнаруживает [эту старую ошибку]. 1 Если вы используете очень старое ядро, то, наверное, пора обновить.

2
27.01.2020, 22:04

Судя по описанию в кооперативах, это сбой ядра (паника). Это определенно не должно никогда произойти.

Что это за раздача? Какая версия ядра? Архитектура?

Сначала все обновите. Если ваш дистрибутив End of Life, обновите. Затем попробуйте еще раз.

Если проблема не исчезнет, ​​вы сможете сделать это воспроизводимым с помощью небольшой программы на C, которая выполняет огромную mmap () , как ваша программа на C ++, и повторяет в этой памяти танец, похожий на C ++ one (возможно, достаточно просто попытаться получить доступ "далеко внутрь"). Соберите все и сообщите об этом через канал сообщений об ошибках вашего дистрибутива.

1
27.01.2020, 22:04

Теги

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