慕尼黑mysql插件结果不一致,用IPC :: Sharelite store()错误:删除标识符

我最近在CentOS服务器上设置了一个munin-node。 所有工作正常,直到我试图添加Apache插件(工作正常)。

出于某种奇怪的原因,曾经工作过的munin的mysql插件停止工作了…每当我运行插件的时候,我现在都会遇到一个奇怪的错误。 例如

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上快速search没有提供任何相关的帮助)

谢谢您的帮助!

我已经解决了我的问题,但我还没有find确切的原因/来源,所以我仍然打开听取其他人的意见。

基本上,munin的mysql插件是用Perl编写的,使用IPC :: ShareLite。

使用strace我能够确定的问题是,应用程序被困在一个特定的信号标识semop上。 使用ipcsipcrm ,我能够删除信号并让插件再次正确运行。

strace给了我semid作为第一个parameter passing给semop 。 使用ipcrm -s semid ,我从系统中删除信号量,修复了这个问题。

因此,我导致相信信号量出了问题(争用也许,但我没有看到什么…)。

几天前遇到这个问题。 我的解决scheme是用mysql_ Cache::FileCache plugin中的Cache::FileCachereplaceCache::SharedMemoryCache ,如下所示:

 *** 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"); }