Submitted by admin on 2012, May 31, 9:46 PM
经常需要记忆这个东西,cmd>/dev/null 2>&1,那么原因是什么呢?
今天好好研究下这个东西
首先是2>1和2>&1的区别,很明显,我们是需要2>&1而不是2>1
2>&1这个是说将cmd执行的错误内容输出到标准输出中
2>1这个则是将cmd执行的错误内容输出到1这个文件中
第二点,2>&1是什么意思?&1是说文件描述符因此2>&1是说将错误输出输出到标准输出
第三点,为什么是cmd >/dev/null 2>&1而不是cmd 2>&1 >/dev/null呢?
如果先2>&1,那么这个时候还没有生成标准输出呢,因此也就无法复用标准输出的文件描述符了,所以需要先有标准输出然后再有错误输出传递到标准输出。
linux | 评论:0
| Trackbacks:0
| 阅读:1034
Submitted by admin on 2012, May 23, 4:01 PM
客户端connect服务器,执行一定时间后,接口返回-99的错误
查看错误信息 OS error code 99: Cannot assign requested address
猜想端口被用光的原因,网络搜索得到一个解释:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”
通过netstat,的确看到很多TIME_WAIT状态的连接
因为是调用API,所以无法对连接进行opt设置,只能通过设置系统配置得以解决
解决办法:
执行命令修改如下2个内核参数
sysctl -w net.ipv4.tcp_timestamps=1 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
sysctl -w net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT sockets的快速回收
linux | 评论:0
| Trackbacks:0
| 阅读:1006
Submitted by admin on 2012, April 24, 2:56 PM
在MRTG的cfg文件找到Target这一行
例如将Target[myrouter]: 2:public@router1:
修改为
Target[myrouter]: 2:public@router1:::::2
就是router1后面加 :::::2即可
linux | 评论:0
| Trackbacks:0
| 阅读:1008
Submitted by admin on 2012, April 16, 11:05 PM
Connector (表示客户端和service之间的连接):
port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户
端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求
数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(以毫秒为单位)
google出来的
linux | 评论:0
| Trackbacks:0
| 阅读:993
Submitted by admin on 2012, April 12, 9:21 PM
在linux里运行top和一些命令的时候,都可以看到load average的信息。
了解到这个是有关系统负载的信息,而且越小越好。
今天找了一下资料。详细了解一下
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用’wait’)
- 没有被停止(例如:等待终止)
====== 这里很关键,不是每个进程都被计算在内的。
load average如何计算
为了使内核可以高效计算load average,采用了fixed-point arithmetic。fixed-point arithmetic是一种非常快速的模拟浮点运算的方法,特别是在没有FPU(float point unit)部件的处理器上,非常有用。
计算公式:load(t) = load(t-1) e^(-5/60) + n (1 - e^(-5/60)),迭代计算,其中n为run-queue length。
由Exponential Smoothing方程有,Y(t)= Y(t-1) + a*[X(t) - Y(t-1)],whereX(t) is the input raw data, Y(t - 1) is the value due to the previoussmoothing iteration and Y(t) is the new smoothed value.令a=1-b,b为e^(-5/60),就可以得到load average的计算公式。
采用此公式的好处:局部的load抖动不会对load average造成重大影响,使其平滑。
load average释疑
一般来说只要每个CPU的当前活动进程数不大于2那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问 题。
假设系统有两个CPU,那么其每个CPU的当前任务数为:Load average/2。这时候取得的数值可以参照上述2-5的标准来进行判断了。
=== 这里就是计算公式了,在股票公司呆过,以前学习过指标和评价参数的计算方法,对理解这个公式帮助很大哟。
linux | 评论:0
| Trackbacks:0
| 阅读:937
Submitted by admin on 2012, March 31, 6:48 PM
.Centos5.5 ext4支持的安装与升级:
yum -y install e4fsprogs
这就可以了,下面的仅供参考
在 RHEL 和 Centos5 中使用 Ext4 前,很多想可能想先给现有的文件系统转换成 Ext4 ,只要运行下面的命令就行了
tune4fs -O extents,uninit_bg,dir_index,flex_bg /dev/sdb1
在重起前,我还要让内核支持 Ext4 的文件系统,需要修改 initrd 的文件本身的内容。如下命令来生成 支持 Ext4 的 initrd。
mkinitrd --with=ext4 --with=ext3 -f /boot/initrd-2.6.18-194.32.1.el5.img 2.6.18-194.32.1
ext4对我来说的优点是,每个子目录支持无限多个文件
ext3只能支持 32000个
NTFS也是无限多,但Linux用NTFS性能有折扣
下面是Ext4,Ext3的特点和区别:
Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:
1. 与 Ext3 兼容。 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。
2. 更大的文件系统和更大的文件。 较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。
3. 无限数量的子目录。 Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。
4. Extents。 Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。
5. 多块分配。 当 写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
6. 延迟分配。 Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
7. 快速 fsck。 以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。
8. 日志校验。 日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9. “无日志”(No Journaling)模式。 日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10. 在线碎片整理。 尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。
11. inode 相关特性。 Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。
12. 持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。
13. 默认启用 barrier。 磁 盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 "mount -o barrier=0" 命令禁用该特性。)
linux | 评论:0
| Trackbacks:0
| 阅读:1096
Submitted by admin on 2012, March 31, 6:45 PM
使用环境使用的是CentOS5.5 内核是2.6.18-194.el5
其实CentOS 5.5里面是有ext4模块的,只是没加载,所以我们先把模块加入系统
[root@linux ~]# cd /lib/modules/2.6.18-194.el5/kernel/fs/ext4/ //ext4模块就在此目录下
[root@linux ext4]# ls
ext4.ko
找到模块后使用modprobe命令添加
[root@linux ext4]# modprobe ext4 //注意:这里只能写模块名,不能写成ext4.ko
添加完后使用lsmod查看
[root@linux ext4]# lsmod |grep ext4
ext4 285409 0
jbd2 47744 1 ext4
crc16 1027 1 ext4
最后使用yum安装一下e4fsprogs
[root@linux ext4]# yum install e4fsprogs
最后创建一个分区来使用ext4创建文件系统
[root@linux ~]# mkfs.ext4 /dev/sda6
到此你的linux系统已经能够支持ext4文件系统了!
linux | 评论:0
| Trackbacks:0
| 阅读:1139
Submitted by admin on 2012, March 31, 5:49 PM
现在固态硬盘越来越流行,如何使用固态硬盘?本人参考了一些国外最新的资料,总结如下:
参考:
http://en.opensuse.org/SDB:SSD_discard_%28trim%29_support
1、内核支持。kernel版本>2.6.37 中包含只针对ext4文件的FITRIM的系统调用。
因此要使用固态硬盘,内核版本必需大于2.6.33,由于2.6.37针对ext4下的固态硬盘进行了优化建议采用2.6.37以上版本,同时文件系统采用ext4。
2、如何使用ssd的TRIM功能。
下载最新版的hdparm,最新版的hdparm支持linux下的trim,也就是discard。
在/etc/rc.local下增加/sbin/wiper.sh
在/etc/fstab 下修改为如下:
/dev/sda1 / ext4 discard,defaults
增加discard选项即可。
几点建议:
1、将/tmp 和 /var/tmp目录挂载到内存中,避免对ssd频繁读写
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
why not btrfs?
tmpfs on /var/run type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
tmpfs on /media type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
tmpfs on /var/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
tmpfs on /tmp type tmpfs (rw,relatime)
/dev/sda2 on / type btrfs (rw,noatime,nodiratime,ssd)
原本在机械硬盘上,写入数据时,系统会通知硬盘先将以前的擦除,再将新的数据写入到磁盘中。而在删除数据时,系统只会在此处做个标记,说明这里应该是没有东西了,等到真正要写入数据时再来真正删除,并且做标记这个动作会保留在磁盘缓存中,等到磁盘空闲时再执行。而当系统识别到SSD并确认SSD支持Trim后,在删除数据时,会不向硬盘通知删除指令,只使用Volume Bitmap来记住这里的数据已经删除。Volume Bitmap只是一个磁盘快照,其建立速度比直接读写硬盘去标记删除区域要快得多。这一步就已经省下一大笔时间了。然后再是写入数据的时候,由于NAND闪存保存数据是纯粹的数字形式,因此可以直接根据Volume Bitmap的情况,向快照中已删除的区块写入新的数据,而不用花时间去擦除原本的数据。
以上就是Trim的原理以及真正作用。
--------------------------------
Linux下的trim支持叫discard,现在ext4和xfs都支持(btrfs应该也支持),内核需要>=2.6.37,xfs的支持在3.0才比较完善。具体需要设置这几个方面:
1. 内核
升级到2.6.37以上,最好用最新的3.0。
禁用disk IO scheduler模块。
2. 文件系统表
修改fstab文件,在挂载参数中加上discard;最好也同时加上noatime。
3. 调整文件系统参数
ext4的话最好禁用日志功能,能防止写入额外的数据而减少ssd寿命。
4. 相关文档:
xfs官网对ssd支持的说明
ext4的ssd设置
suse官方对ssd支持的相关说明
fdisk -H 224 -S 56 /dev/sdd
fdisk -H 32 -S 32 /dev/sdd
配置固态硬盘(SSD)的Ext 4
接着需要关注的就是文件系统。想要优化文件系统删除字节区块的效率,就必须确保小于512K的文件分布在不同的删除字节区块上。要做到这一点,必须确保在创建可扩展文件系统时指定了需要使用的条带的宽度和幅度。这些值在页面中指定,默认大小为4KB。要创建一个最佳的可扩展文件系统,应该使用如下命令:
mkfs.ext4 -E stride=128,stripe-width=128 /dev/sda1
如果要修改现有的文件系统的参数,可以使用tune2fs实用程序:
tune2fs -E stride=128,stripe-width=128 /dev/sda1
配置固态硬盘(SSD)的I/O调度程序
优化的第三个部分涉及到I/O调度程序。该模块是一个决定如何处理I/O请求的核心组件。默认情况下就是非常公平的排队,对于普通的磁盘驱动器来说,这是很好的方案,但对于以期限调度为优势的固态硬盘来说,这并不是最好的。
如果你想在系统中对所有磁盘采用期限调度,可以在内核加载时把elevator=deadline这句话加入到系统引导管理器(GURB)中;如果你只是想针对某一个磁盘,就应该在rc.local文件中加入类似如下实例的一句话,那么每次当系统重启,期限调度就会应用到指定的磁盘。如下实例将会对/dev/sdb磁盘采用期限调度。
echo deadline > /sys/block/sda/queue/scheduler
清理固态硬盘(SSD)中的数据块
最后一个重要的步骤称为“清理”,该操作可以确保在删除文件后相应的数据块真正清空,然后在创建新的文件时才能有可用的数据块。如果没有清理操作,一旦数据块空间填满,固态硬盘的性能就会下降。如果使用丢弃挂载选项,当文件删除后,数据块也会被相应地清除,这样可以显著提高固态硬盘的性能。2.6.33以上的内核已经支持清理操作。
要启用清理功能,需要在固态硬盘的/etc/fstab配置中为挂载文件系统添加丢弃选项。示例中的命令为挂载的根逻辑卷启用了清理操作。
/dev/system/root/ext4 discard,errors=remount-ro,noatime 0 1
该命令同时也添加了Noatime选项,该选项保证了文件的访问时间不会因为每次读取而更新,从而降低对文件系统的写入次数。
在fasab配置文件中完成对文件系统的这些修改后,重启计算机,或者通知文件系统重新读取其配置,然后使用/etc/fstab文件中包含的mount -o命令重新安装每个文件系统。
linux | 评论:0
| Trackbacks:0
| 阅读:2511