Результаты плагина Munin mysql противоречивы, ошибка IPC::Sharelite store(): идентификатор удален

Я недавно установил munin-узел на сервере CentOS. Все работало нормально, пока я не попытался добавить плагин apache (который работает нормально).

По какой-то странной причине плагины mysql для munin, которые раньше работали, перестали работать... Теперь я получаю странную ошибку всякий раз, когда запускаю плагин с munin-run. Например

munin-run mysql_files_tables

возвращает меня

Ошибка IPC::ShareLite store(): идентификатор удален в строке /usr/lib/perl5/vendor_perl/5.8.8/Cache/SharedMemoryBackend.pm 156

но иногда это также вернется

table_open_cache.value 64

Open_files.value 58

Open_tables.value 64

Opened_tables.value 19341

но через некоторое время он вернется к предыдущей ошибке.

У меня нет никаких знаний о IPC или библиотеке ShareLite, поэтому я не знаю, с чего начать. Поскольку это модуль, связанный с разделяемой памятью, я попытался отследить сегменты разделяемой памяти с помощью ipcs без особого успеха.

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

Кто-нибудь сталкивался с этой проблемой? (быстрый поиск в Google не предоставил никакой релевантной помощи)

Спасибо за помощь!

2 ответа

Решение

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

По сути, плагины mysql для munin написаны на perl, используйте IPC::ShareLite.

Используя strace, я смог определить, что проблема в том, что приложение застревает в семопе с определенным идентификатором семафора. Используя ipcs и ipcrm, я смог удалить семафор и снова запустить плагин.

В качестве первого аргумента, переданного в semop, strace дает мне семид. С помощью ipcrm -s semid я удаляю семафор из системы, что решает проблему.

Таким образом, меня заставляют поверить, что с семафором что-то пошло не так (возможно, спор, но я не вижу из чего...).

Столкнулся с этой проблемой несколько дней назад. Моим решением было заменить Cache::SharedMemoryCache с Cache::FileCache в mysql_ Плагин, как показано ниже:

*** mysql_      2015-12-20 15:13:12.000000000 +0100
--- mysqlnew_   2015-12-20 15:12:43.000000000 +0100
*************** use Munin::Plugin;
*** 143,149 ****
  my $has_cache;

  BEGIN {
!     eval 'require Cache::SharedMemoryCache';
      $has_cache = $@ ? 0 : 1;
  }

--- 143,149 ----
  my $has_cache;

  BEGIN {
!     eval 'require Cache::FileCache';
      $has_cache = $@ ? 0 : 1;
  }

*************** my %cache_options = (
*** 172,178 ****
  my $shared_memory_cache ;
  if ($has_cache)
  {
!   $shared_memory_cache = Cache::SharedMemoryCache->new(\%cache_options)
      or die("Couldn't instantiate SharedMemoryCache");
  }

--- 172,178 ----
  my $shared_memory_cache ;
  if ($has_cache)
  {
!   $shared_memory_cache = Cache::FileCache->new(\%cache_options)
      or die("Couldn't instantiate SharedMemoryCache");
  }
Другие вопросы по тегам