Aug 15 2013

centos 5.x 升级内核到 3.0 以上

Category: 技术ssmax @ 15:17:32

公司的机器终于有申请到ssd硬盘了,昨天插上去服务器,但是发现centos 5.x 虽然可以支持ext4,但是ext4的模块不支持TRIM(discard)功能,用hdpram虽然可以手动TRIM,但不是太保险,查了一下资料,内核太老了,5.x一直是2.6.18.x的内核,centos 6 就可以完美支持TRIM了,但是centos 5.x 不能直接在线升级到 6 ,必须重装系统,不想弄到系统重装这么大件事。

故继续翻资料,发现TRIM支持比较好要到3.0的内核了,好,试试编译内核吧,很久没有玩过了。

1、首先到 https://www.kernel.org/ 找合适的内核,longterm 版本的内核有 2.6.32 (centos 6 就是这个),2.6.34,3.0.90 等等,一不做二不休,直接搞到3.0以上吧,下载内核,解压

2、准备必要的编译工具:

> yum install gcc ncurses ncurses-devel 

2、进入解压目录,要配置内核了,我选择用原来centos 5 的一些内核参数

> cp /boot/config-2.6.18-348.12.1.el5 ./.config
> make oldconfig
> 全部回车,选择默认,或者按照你们自己的需要选择

3、config完毕后,需要手动改写几个参数,vim .config
CONFIG_SAMPLES=n

这个参数可以避免编译阶段 samples/hidraw/hid-example.c编译失败,samples里面有引用当前环境的一些headers

CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y

这两个参数让内核使用旧版的sysfs,由于centos的确太tmd老了,如果不选择这个选项,文件系统等等无法直接装载

4、修改好.config 文件之后,就要编译了

> make 
#等好多分钟
> make modules_install
# 安装 /lib/modules 目录
> make install
# 安装 vmlinux 到 /boot
> 修改 /boot/grub/menu.lst 使default选择新内核启动

完成了之后就reboot吧。。

5、reboot之后,看看各个服务的启动情况,本来很happy,但是突然看到 udev的一个超时报错

udevd-event: wait_for_sysfs waitnig for xxxxxxx ioerr_cnt failed

这个是怎么回事呢。。。
继续翻资料,发现还是udev太老的问题,新版本已经不需要这些事件了。修改udev配置文件
/etc/udev/rules.d/05-udev-early.rules

#ACTION=="add", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"
# 注释掉上面这行,加上下面这行
ACTION=="add", SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", WAIT_FOR_SYSFS="ioerr_cnt"

重启,错误消失,但是不知道对scsi硬盘控制器会有什么不良影响,以上流程在vmware(scsi控制器),dell 2950 上面的centos 5.9最新版本试验通过。。。
安装的是3.0.90版本,安装完了以后再去查,发现已经更新到3.0.91 了,太tmd勤快了。

最后一点,记得在yum.conf里面去掉kernel*的检查,要不啥时候update一下就不知不觉升级了2.6.18的内核。。。
exclude=kernel*

各位折腾正式服务器环境之前敬请测试。


Jun 26 2013

PHP 中的libcurl增加 CURLOPT_MAXFILESIZE 参数

Category: 技术ssmax @ 10:04:39

编辑一下,php 5.5.0 的发布文档里面已经表示新版php已经增加了此参数,所以如果各位的php是最新的5.5或以上,可以忽略下面的文字啦,呵呵。

libcurl有一个很有用的参数

MAXFILESIZE,可以根据content length来判断是否超过文件下载大小,但是php默认的版本没有编译这个参数进去。

根据libcurl 的 源代码所示

https://github.com/bagder/curl/blob/master/docs/libcurl/symbols-in-versions

CURLOPT_MAXFILESIZE             7.10.8
CURLOPT_MAXFILESIZE_LARGE       7.11.0

CURLOPT_MAXFILESIZE 是从 7.10.8版本开始存在的

修改php源代码:
ext/curl/interface.c

寻找关键字 CURLOPT_IPRESOLVE(该功能也是7.10.8版本开始存在,也是long类型变量)
插入CURLOPT_MAXFILESIZE 的判断,由于同样是long类型,所以不需要做什么特殊处理


#if LIBCURL_VERSION_NUM > 0x070a07 /* CURLOPT_IPRESOLVE is available since curl 7.10.8 */
        REGISTER_CURL_CONSTANT(CURLOPT_IPRESOLVE);
        REGISTER_CURL_CONSTANT(CURL_IPRESOLVE_WHATEVER);
        REGISTER_CURL_CONSTANT(CURL_IPRESOLVE_V4);
        REGISTER_CURL_CONSTANT(CURL_IPRESOLVE_V6);
        REGISTER_CURL_CONSTANT(CURLOPT_MAXFILESIZE);
#endif
......

#if LIBCURL_VERSION_NUM > 0x070a07 /* CURLOPT_IPRESOLVE is available since curl 7.10.8 */
                case CURLOPT_IPRESOLVE:
                case CURLOPT_MAXFILESIZE:
#endif

编辑完成后,重新编译PHP,即可在php的curl_setopt中,使用CURLOPT_MAXFILESIZE参数,指定下载文件的限制大小,单位为bytes。


Jun 14 2013

MYSQL 主从同步文档的大坑

Category: 技术ssmax @ 15:15:42

http://dev.mysql.com/doc/refman/5.1/en/replication-rules-db-options.html

mysql 主从同步的参数

replicate-do-db   指定同步某个DB

如果大家有一个需求,只同步某一些DB,就需要用

replicate-do-db=dbA

replicate-do-db=dbB

ok,这里还很明确,但是如果大家又想不同步dbA里面某个表。。文档里面的坑就出现了

按照文档的意思,如果 db level中没有匹配到,就会转入table level的匹配。ok,按照文档,我配置成这样:

replicate-do-db=dbB
replicate-ignore-table=dbA.question
replicate-wild-do-table=dbA.%

结果,dbA就全部不会同步了。。。但是根据文档中的示意图,理论上是可以的啊

其实坑就在这里了,如果存在 replicate-do-db, 最后如果不是excute的结果,是不会进入 table level的判断的。

所以要达到我们的需求,就需要这样配置:

replicate-do-db=dbA

replicate-do-db=dbB
replicate-ignore-table=dbA.question
replicate-wild-do-table=dbA.%

看官看到这里必定会问,为什么要用 replicate-wild-do-table 多此一举呢?如果没有了这一句,一切不是都很清晰吗。。。

问题就是 replicate-do-db 只会同步 USE DB 之后的语句,并不会同步直接DB.table 非指定DB域的语句,所以很多时候,还是要加上 replicate-wild-do-table, 会稳妥一点。

好了,我们都以为 replicate-do-db 和 replicate-wild-do-table 可以一起用,其实。。。这里的坑更变态。

根据刚才的规则,如果存在 replicate-do-db,语句必须在db级是execute的,才会进入 table级别的判断。。。所以,这里的

replicate-wild-do-table 压根就达不到大家预料的效果,比如大家USE dbC之后,再更新dbA中的数据,发现在

replicate-do-db=dbA

replicate-wild-do-table=dbA.%

这样的配置中,根本达不到想要的效果,大家USE dbC之后,再更新dbA中的数据,结果还是没有同步到从,所以最后,MYSQL的文档写了一句:

To make it easier to determine what effect an option set will have, it is recommended that you avoid mixing “do”and “ignore” options, or wildcard and nonwildcard options. An example of the latter that may have unintended effects is the use of --replicate-do-db and --replicate-wild-do-table together, where --replicate-wild-do-table uses a pattern for the database name that matches the name given for --replicate-do-db.

尽量不要混合使用,除非你已经测试过了。。。


May 25 2013

测试时区

Category: 乱up当秘笈ssmax @ 15:01:33

测试时区!!


May 25 2013

这个网站竟然都会被攻击。。。

Category: 乱up当秘笈ssmax @ 13:17:18

我自己的博客都被人可以评论攻击,真是无聊啊。

每天上10万次post comment,一次都没有成功,还是孜孜不倦的在重试。真实佩服啊。

直接在squid加了一些策略,先屏蔽了评论,等找出ip规律一次过搞掉吧。


May 17 2013

系统负载命令备忘

Category: 技术ssmax @ 19:25:45

sysstat 查看系统负载,里面有cpu占用和中断,上下文切换等信息

iostat 查看io负载,主要是读写次数速度cpu占用等

sar 比较强大的命令,啥都可以看,我一般用来看中断,sar -I XALL -d 3 10

或者从 /proc/interrupts 看

 

今天重新打开了服务器上面的irqbalance, 不知道从什么时候开始我就把这个服务给k掉了。

网卡比较繁忙,不知道是不是这里引起服务器负载过高,先观察下。


Oct 29 2012

ps 备忘

Category: 技术ssmax @ 21:22:30

       To see every process on the system using standard syntax:
          ps -e
          ps -ef
          ps -eF
          ps -ely

       To see every process on the system using BSD syntax:
          ps ax
          ps axu

       To print a process tree:
          ps -ejH
          ps axjf

       To get info about threads:
          ps -eLf
          ps axms


Sep 27 2012

Bug改好了。。。

Category: 技术ssmax @ 16:10:49
  • mod_caucho: linux timeout issue millis vs sec in read timeout (#5203, rep by ssmax)
  • http: sendfile needs to open file using O_RDONLY (#5202, rep by ssmax)

恩,中午的烧排骨真不错。


Aug 31 2012

找bug的日子。。。

Category: 技术ssmax @ 20:07:43

最近几天很郁闷,给何总搞了台新的resin,但是一直出问题,纠结了2个星期,终于都被我找出来了。。。

给官方提了两个bug

http://bugs.caucho.com/view.php?id=5202
http://bugs.caucho.com/view.php?id=5203

写程序越来越不注意细节了,每个请求都经过这段代码,都没有好好的检查。唉。


Jul 20 2012

Google Chrome 允许使用过期插件

Category: 技术ssmax @ 17:19:05

今天更新了一下chrome,发现旧的flash插件一直弹出提示,说已经过期,但是由于项目需要,必须 10.3 的flash版本来测试,又不想每次都要点运行一次。。。

找了一下,发现加上命令行参数:
–allow-outdated-plugins

就可以允许使用了。

下面是全部命令行参数的列表:
http://peter.sh/experiments/chromium-command-line-switches/

 


« Previous PageNext Page »