正在加载...
分页: 62/186 第一页 上页 57 58 59 60 61 62 63 64 65 66 下页 最后页 [ 显示模式: 摘要 | 列表 ]
/proc/sys/vm/dirty_ratio

这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 10。下面是增大的方法:

echo ‘40′ > /proc/sys/vm/dirty_ratio


/proc/sys/vm/dirty_background_ratio

这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候, pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 5。下面是增大的方法:

echo ‘20′ > /proc/sys/vm/dirty_background_ratio

/proc/sys/vm/dirty_writeback_centisecs

这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。设置方法如下:

echo “200″ > /proc/sys/vm/dirty_writeback_centisecs

如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值:

echo “1000″ > /proc/sys/vm/dirty_writeback_centisecs

/proc/sys/vm/dirty_expire_centisecs

这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为 1500,也就是15秒算旧。

echo “1500″ > /proc/sys/vm/dirty_expire_centisecs

当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。

与网络IO子系统有关的

/proc/sys/net/ipv4/tcp_retrans_collapse

这个参数控制TCP双方Window协商出现错误的时候的一些重传的行为。但是在老的2.6的核(<2.6.18)里头,这个重传会导致kernel oops,kernel panic,所以,如果出现有 tcp_retrans_*样子的kernel panic,可以把这个参数给设置成0:

echo ‘0′ >/proc/sys/net/ipv4/tcp_retrans_collapse

提高Linux应对短连接的负载能力

在存在大量短连接的情况下,Linux的TCP栈一般都会生成大量的 TIME_WAIT 状态的socket。你可以用下面的命令看到:

netstat -ant| grep -i time_wait

有时候,这个数目是惊人的:

netstat -ant|grep -i time_wait |wc -l

可能会超过三四万。这个时候,我们需要修改 linux kernel 的 tcp time wait的时间,缩短之,有个 sysctl 参数貌似可以使用,它是 /proc/sys/net/ipv4/tcp_fin_timeout,缺省值是 60,也就是60秒,很多网上的资料都说将这个数值设置低一些就可以减少netstat 里面的TIME_WAIT状态,但是这个说法是错误的。经过认真阅读Linux的内核源代码,我们发现这个数值其实是输出用的,修改之后并没有真正的读回内核中进行使用,而内核中真正管用的是一个宏定义,在 $KERNEL/include/net/tcp.h里面,有下面的行:

#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
* state, about 60 seconds */

而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10 秒比较合适,也就是把上面的修改为:

#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
* state, about 60 seconds */

然后重新编译内核,重启系统即可发现短连接造成的TIME_WAIT状态大大减少:

netstat -ant | grep -i time_wait |wc -l

一般情况都可以至少减少2/3。也能相应提高系统应对短连接的速度。

Tags: , ,

EXT3 文件系统错误的修复

[ 2009/12/02 08:59 | by selboo ]
   最近处理的一件linux服务器断电导致文件系统启动后文件系统不可读写,数据不可用的桉例,现总结下Linux 文件系统错误的修复方法。

   EXT3-fs error (device hda3) in start_transaction: Journal has aborted

   If your system abruptly loses power, or if a RAID card is beginning to fail, you might see an ominous message like this within your logs:

    EXT3-fs error (device hda3) in start_transaction: Journal has aborted

    Basically, the system is telling you that it’s detected a filesystem/journal mismatch, and it can’t utilize the journal any longer. When this situation pops up, the filesystem gets mounted read-only almost immediately. To fix the situation, you can remount the partition as ext2 (if it isn’t your active root partition), or you can commence the repair operations.

    If you’re working with an active root partition, you will need to boot into some rescue media and perform these operations there. If this error occurs with an additional partition besides the root partition, simply unmount the broken filesystem and proceed with these operations.

    Remove the journal from the filesystem (effectively turning it into ext2):

    # tune2fs -O ^has_journal /dev/hda3

    Now, you will need to fsck it to correct any possible problems (throw in a -y flag to say yes to all repairs, -C for a progress bar):

    # e2fsck /dev/hda3

    Once that's finished, make a new journal which effectively makes the partition an ext3 filesystem again

    # tune2fs -j /dev/hda3

    You should be able to mount the partition as an ext3 partition at this time:

    # mount -t ext3 /dev/hda3 /mnt/fixed

    Be sure to check your dmesg output for any additional errors after you’re finished!

   硬盘故障导致的数据丢失有可能是惨重的,但如果已经发生了,就需要最大程度地将数据恢复出来。这介绍当磁盘因严重问题无法访问后(但BIOS还能识别),数据的抢救方法,并讨论ext2&ext3格式分区的磁盘短读(short read)错误。首先约定:需要手动输入的字符用黑体字给出,其余的为终端输出。

    如果使用ext2或ext3文件系统,可能会收到类似下面一些警告信息,该警告信息来自e2fsck实用程序:

    e2fsck /dev/hda1
    e2fsck: Attempt to read block from filesystem resulted in short read

    如果看到这个消息,首先想到可能是磁盘的主超级块损坏。而在创建文件系统的时候,mke2fs已经自动创建了磁盘的超级块的备份。可以告诉e2fsck程序使用一个备用超级块检查文件系统。备用超级块一般创建于块8193、16384或32768,取决于磁盘的大小(可以使用mkfs.ext3 -n /dev/hda1查看)。假设是块大硬盘,则使用:

    e2fsck -b 32768 /dev/hda1

    如果是超级块的问题,则程序返回后,备用超级块被启用,磁盘恢复正常。如果提示下面的问题:
e2fsck: Attempt to read block from filesystem resulted in short read while checking ext3 journal for /dev/hda1
    说明问题不是出在超级块,出自日志文件系统的日志。此时可以安全地删除ext3文件系统的日志:

    tune2fs -f -O ^has_journal /dev/hda1

    这样就删除了/dev/hda1文件系统上的日志,这时可以重新尝试挂载分区,必要的话可以重建日志系统(使用tune2fs -j /dev/xxx)。
    如果tune2fs提示下面的错误:
    tune2fs: Attempt to read block from filesystem resulted in short read while reading journal inode
    则说明指向日志的inode坏了,意味着无法清除日志。这时可以尝试debugfs命令,它是ext2&3文件系统的调试器。也可以再次使用e2fsck,加上-c参数检查文件系统的坏块。至此,因为无法检查或修复问题磁盘上的文件系统,该拿出杀手锏了。

    使用ddrescue克隆损坏的磁盘
    如果磁盘因为坏块而妨碍了读取,可以使用一个原始的磁盘复制实用程序创建磁盘的一个副本。Unix/Linux系统自带了一个简单实用程序dd,它把一个文件/分区/磁盘复制到另一个(在第一个专题里用到过)。前提条件时必须在系统里添加一块容量不小于问题磁盘的新硬盘。
    新硬盘准备就绪后,输入下面命令:

    dd if=/dev/hda of=/dev/hdb conv=noerror,sync

    上面的命令将坏磁盘(/dev/hda)复制到新磁盘(/dev/hdb),忽略读取时遇到的错误(noerror),当遇到不能访问的块时用适当数量的空值填充输出(sync)。
    但是dd有几个缺点:首先是速度太慢;然后是不显示进度信息,直到完成前它都是沉默的;不重新尝试失败的读取,这会减少能从坏盘恢复的数据量。因此在这里介绍另一个软件——ddrescue,可以从 http://www.gnu.org/software/ddrescue/ddrescue.html 获取最新版(Fedora8用户可以直接用yum install dd_rescue安装) 。目前ddrescue最新版本是1.7,直接下载链接: http://ftp.gnu.org/gnu/ddrescue/ddrescue-1.7.tar.bz2
    编译、安装后,可以使用下面命令完成相同的任务:

    ddrescue --max-retries=-1 /dev/hda /dev/hdb

    其中max-retries=-1参数表示无论遇到多少错误都不要停止。程序从hda读取数据并写到hdb中时,不断更新各项数据,可以方便地查看工作进行情况。
    在ddrescue结束磁盘复制后,在新硬盘上运行e2fsck,以消除原始磁盘的坏块引起的文件系统错误。由于肯定会有大量错误,可以用-y参数运行e2fsck,指示e2fsck对每个问题都回答yes:

    e2fsck -y /dev/hdb

    此时,可以使用mount命令挂载文件系统,看看数据的恢复情况了。记得检查驱动器根目录下的lost+found文件夹,fsck把不能正确链接的文件和目录放在了这个文件夹里。

Linux SHELL if 命令参数说明

[ 2009/11/30 14:08 | by selboo ]
* -b 当file存在并且是块文件时返回真
* -c 当file存在并且是字符文件时返回真
* -d 当pathname存在并且是一个目录时返回真
* -e 当pathname指定的文件或目录存在时返回真
* -f 当file存在并且是正规文件时返回真
* -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
* -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
* -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
* -p 当file存在并且是命令管道时返回为真
* -r 当由pathname指定的文件或目录存在并且可读时返回为真
* -s 当file存在文件大小大于0时返回真
* -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
* -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
* -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。

UNIX Shell 里面比较字符写法:

* -eq 等于
* -ne 不等于
* -gt 大于
* -lt 小于
* -le 小于等于
* -ge 大于等于
* -z  空串
* =   两个字符相等
* !=  两个字符不等
* -n  非空串
Tags:

使用Dstat监控Linux系统资源

[ 2009/11/29 17:05 | by selboo ]
1、操作系统是Centos 5.2,在安装之前配置DAG源
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

这样子更新源后就可以直接使用yum安装
yum install dstat.noarch

2、如果不使用yum方式安装,也可以到官方下载RPM安装;
官方网站:http://dag.wieers.com/rpm/packages/dstat/

3、使用说明r/>Dstat的使用:
安装完成后,执行 dstat 命令,默认情况它会收集-cpu-、-disk-、-net-、-paging-、-system-的数据,一秒钟收集一次。
默认输入 dstat 等于输入了dstat -cdngy 1或dstat -a 1;
推荐使用 date && dstat  -tclmdny 60 一分钟监视一次(注意调节显示的宽度,或去掉-t选项)。

于SysStat相比,Dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼容易观察;
而且Dstat支持即时刷新,譬如:输入 dstat 3,即每三秒收集一次,但最新的数据都会每秒刷新显示。
和SysStat相同的是,Dstat也可以收集指定的性能资源。譬如 dstat -c 即显示CPU的使用情况。

Dstat options:
  -c, –cpu              显示CPU情况
     -C 0,3,total           include cpu0, cpu3 and total
  -d, –disk             显示磁盘情况
     -D total,hda           include hda and total
  -g, –page             enable page stats
  -i, –int              enable interrupt stats
     -I 5,eth2              include int5 and interrupt used by eth2
  -l, –load             enable load stats
  -m, –mem              显示内存情况
  -n, –net              显示网络情况
     -N eth1,total          可以指定网络接口
  -p, –proc             enable process stats
  -s, –swap             显示swap情况
     -S swap1,total         可以指定多个swap
  -t, –time             enable time counter
  -y, –sys              enable system stats
  –ipc                  报告IPC消息队列和信号量的使用情况
  –lock                 enable lock stats
  –raw                  enable raw stats
  –tcp                  enable tcp stats
  –udp                  enable udp stats
  –unix                 enable unix stats

  -M stat1,stat2         enable external stats
     –mods stat1,stat2

  -a, –all              使用-cdngy 缺省的就是这样显示
  -f, –full             使用 -C, -D, -I, -N and -S 显示
  -v, –vmstat           使用-pmgdsc -D 显示

  –integer              show integer values
  –nocolor              disable colors (implies –noupdate)
  –noheaders            只显示一次表头以后就不显示了,使用重定向写入文件时很有用
  –noupdate             disable intermediate updates
  –output file          写入到CVS文件中

很简单,一看就明白了,要说明的是如果当usr和sys的数值大于80时说明cpu的负载过重,这个软件和vmstat很像,不过和vmstat相比好像少了io部份的显示dstat只能显示磁盘的吞吐量而不是显示负载情况,dstat和几乎所有监控软件一样,只能对整个系统进行监控而不能对某一个进程或某一个程序进行深入分析。如果你知道如何设置,请通知我。

我常使用的参数是
dstat -cdlmnpsy

做个别名链接
alias dstat='dstat -cdlmnpsy'
Tags:

Mysql mysqlreport

[ 2009/11/29 11:47 | by selboo ]
要掌握数据库状态,并了解其不足,然后作出一份详细可靠的优化方案,必须对数据库的各个参数进行量化的了解比如cache用了多,数据每秒有多少请求,select与insert的比例各占多少等。对mysql而言最简单的方案是直接show status,不过这些数据十分晦涩枯燥,不容易理解。mysqlreport的报表则易懂得多.
mysqlreport提供了几乎所有的mysql的关键status信息,而且对这些数据做了加工处理理解起来十分的方便。
参考文档:

1.http://hackmysql.com/mysqlreportguide
2.http://hi.baidu.com/xuwanbest/blog/item/f3f8fca1df8e2788461064fe.html

只有亲试之,才会体会其中的妙处

部分结果:
Tags:
分页: 62/186 第一页 上页 57 58 59 60 61 62 63 64 65 66 下页 最后页 [ 显示模式: 摘要 | 列表 ]