EDAC错误

这一段时间一直在忙测试内存,足足测试了2个月了,真是悲剧阿,垃圾内存,测试中还发生过比较恶心的连锁反应——把相连的H3C交换机搞挂了,经过抓包及更换交换机、内存进行排查,基本可以断定是新加的兼容内存的不稳定性,在高负载压力时扰乱的网卡发出的电平信号,进而影响了H3C交换机(-_-我也觉得不可思议,不过确实发生了),换其他牌子的交换机就没事,换原装的内存也没事.唯一欣慰的是, 事情也快结束,希望2月底能全部弄完

以下是整个事情的经过

在检查一批新加兼容内存服务器时, 遇到一个错误,不断的刷到屏幕上,而没有加新内存的服务器却正常,首先怀疑新加内存不兼容,报的错误如下

Jan 8 10:17:08 xxx kernel: [506809.272631] EDAC i5000 MC0: FATAL ERRORS Found!!! 1st FATAL Err Reg= 0x4
Jan 8 10:17:08 xxx kernel: [506809.272668] EDAC i5000 MC0: >Tmid Thermal event with intelligent throttling disabled
Jan 8 10:17:08 xxx kernel: [506809.272722] EDAC MC0: UE row 3,channel-a= 0 channel-b= 1 labels "-": (Branch=0 DRAM-Bank=2 RDWR=Write RAS=9879 CAS=0 FATAL Err=0x4)
Jan 8 10:17:09 xxx kernel: [506811.737687] EDAC i5000 MC0: FATAL ERRORS Found!!! 1st FATAL Err Reg= 0x4
Jan 8 10:17:09 xxx kernel: [506811.737724] EDAC i5000 MC0: >Tmid Thermal event with intelligent throttling disabled
Jan 8 10:17:09 xxx kernel: [506811.737778] EDAC MC0: UE row 1,channel-a= 0 channel-b= 1 labels "-": (Branch=0 DRAM-Bank=0 RDWR=Read RAS=11057 CAS=0 FATAL Err=0x4)

故障分析

EDAC是内核监控ECC内存状态的模块
i5000是Intel内存控制器
这个错误信息从字面理解是温度过高,而智能调节也没打开产生的告警,在Intel的资料里有提到此信息
第208页,3.22.1
http://www.intel.com/Assets/PDF/datasheet/313071.pdf

故障可能原因

1.新内存散热性能不佳产生报警
2.新内存与BIOS不兼容,触发了EDAC模块与BIOS的冲突

故障解决方法

1.最好就是换掉有问题的内存
2.如果实在负载不高,那也可以考虑下屏蔽这个报警,不过这个只是让它不报警,实际问题依然存在,依然存在风险
由于EDAC只是起监控功能,且BIOS本身也有自己的内存监控,可通过屏蔽EDAC来屏蔽这个错误
在/etc/modprobe.conf添加以下字段
blacklist i5000_edac

不加载edac后,再测试内存,不报警,暂时表现正常,但不能排除依然存在内存过热等或不兼容情况对服务造成影响.

参考资料:
1.https://bugs.launchpad.net/ubuntu/+source/linux/+bug/276444
2.http://forums.oracle.com/forums/thread.jspa?threadID=890202&tstart=0
3.https://bugzilla.novell.com/show_bug.cgi?id=418116
4.http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/drivers/edac/i5000_edac.c
5.http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.3/html/Release_Notes/sect-Release_Notes-Known_Issues.html
6.http://www.intel.com/Assets/PDF/datasheet/313071.pdf

以下是RH网站提供的方法
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.3/html/Release_Notes/sect-Release_Notes-Known_Issues.html

如果EDAC模块被加载,BIOS的内存报告功能将失效,因为EDAC模块清除了寄存器里的信息,导致BIOS获取不到有关内存错误的信息
如果想打开BIOS的内存报告功能,需要阻止EDAC模块的加载,把以下信息添加到/etc/modprobe.conf:
blacklist edac_mc
blacklist i5000_edac
blacklist i3000_edac
blacklist e752x_edac

搭建WordPress的点滴

终于弄好了自己的个人空间了,有了wordpress,真是方便多了,之前还想自己写一套简单的blog,但想想还是算了,还是留点时间多折腾点其他事情吧。

出于方便移植的考虑,我抛弃了wordpress的默认数据库mysql,改用了sqlite,需要安装pdo-for-wordpress, 倒也简单,php5默认就有pdo模块,需要另外装的就是php5-sqlite吧。

折腾好了后,再捣鼓捣鼓主题和页面设置,我的blog就人模人样拉。不过总觉得慢,200ms的延时,但访问时apache进程总是有几秒钟处于D状态,我的vps倒也没什么负载,我怀疑是真实主机的io太高导致的,没办法,只能自己尽量提高自己blog的速度了。

搜了下,有个国人写的加速插件cos-html-cache,原理就是把生成一份静态html来提高速度吧,看起来不错,我就装上了,确实速度有些许提高,还是有点欣慰的。

以后就得多写写心得。

附:整个过程还是遇到不少小问题的
1.Warning: implode() [function.implode]: Invalid arguments passed in /wp-includes/post.php
发生在我定义新页面时,搜了下,还不少人遇到,也有别人提供的解决方法
编辑/wp-includes/post.php

把以下语句

$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . implode("', '", $wpdb->escape($hierarchical_post_types)) . "' ) AND ID != %d AND post_parent = %d LIMIT 1";

改为

$hierarchical_post_types_string = implode("', '", $hierarchical_post_types);
$hierarchical_post_types_string = addslashes($hierarchical_post_types_string);
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . $hierarchical_post_types_string . "' ) AND ID != %d AND post_parent = %d LIMIT 1";

出自:http://wordpress-hacks.com/warning-implode-function-implode-invalid-arguments-passed-in-wp-includespost-php-on-line-1762.php

2..htaccess: RewriteEngine not allowed here

开启了伪静态urls后,访问时就出现500错误,看了下error-log,提示.htaccess: RewriteEngine not allowed here
先确定了Rewrite模块在apache加载了,后来还是搜到了答案,编辑apache配置,在对应的vhost中修改AllowOverride FileInfo

附上AllowOverride的文档

AllowOverride 指令
说明    确定允许存在于.htaccess文件中的指令类型
语法    AllowOverride All|None|directive-type [directive-type] ...
默认值  AllowOverride All
作用域  directory
状态    核心(C)
模块    core

当服务器发现一个.htaccess文件(由AccessFileName指定)时,它需要知道在这个文件中声明的哪些指令能覆盖在此之前指定的配置指令。
仅允许存在于<Directory>配置段
AllowOverride仅在不包含正则表达式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是无效的。

如果此指令被设置为None ,那么.htaccess文件将被完全忽略。事实上,服务器根本不会读取.htaccess文件。

当此指令设置为 All时,所有具有".htaccess"作用域的指令都允许出现在.htaccess文件中。

directive-type可以是下列各组指令之一:

AuthConfig
    允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。
FileInfo
    允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。
Indexes
    允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。
Limit
    允许使用控制主机访问的指令(Allow, Deny, Order)。
Options[=Option,...]
    允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。

例如以下指令只允许在.htaccess中使用AuthConfig和Indexes组的指令:

AllowOverride AuthConfig Indexes

不在这两组中的指令将会导致服务器产生一个内部错误。
第 7 页,共 7 页« 最新...34567