工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.51099.com 注册 | 登陆
浏览模式: 标准 | 列表2009年03月的文章

lighttpd

收集一些DNS IP 列表

收集一些DNS IP 列表

广州 202.96.128.166,202.96.128.86

茂名 202.103.176.22

Nginx官方wiki

mysql 部分参数

含义如下:
aborted_clients 客户端非法中断连接次数
aborted_connects 连接mysql失败次数
com_xxx xxx命令执行次数,有很多条
connections 连接mysql的数量
Created_tmp_disk_tables 在磁盘上创建的临时表
Created_tmp_tables 在内存里创建的临时表
Created_tmp_files 临时文件数
Key_read_requests The number of requests to read a key block from the cache
Key_reads The number of physical reads of a key block from disk
Max_used_connections 同时使用的连接数
Open_tables 开放的表
Open_files 开放的文件
Opened_tables 打开的表
Questions 提交到server的查询数
Sort_merge_passes 如果这个值很大,应该增加my.cnf中的sort_buffer值
Uptime 服务器已经工作的秒数


提升性能的建议:
1.如果opened_tables太大,应该把my.cnf中的table_cache变大
2.如果Key_reads太大,则应该把my.cnf中key_buffer_size变大.可以用Key_reads/Key_read_requests计算出cache失败率
3.如果Handler_read_rnd太大,则你写的SQL语句里很多查询都是要扫描整个表,而没有发挥索引的键的作用
4.如果Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections计算cache命中率
5.如果Created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于内存的临时表代替基于磁盘的

vmstat(转)

Procs
-r:
    运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
-b:
    处于不可中断状态的进程数,常见的情况是由IO引起的


Memory
-swpd: 切换到交换内存上的内存(默认以KB为单位)
如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。
-free: 空闲的物理内存
-buff: 作为buffer cache的内存,对块设备的读写进行缓冲
-cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。


Swap
-si: 交换内存使用,由磁盘调入内存
-so: 交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。
我发现有些朋友看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。


Io
-bi: 从块设备读入的数据总量(读磁盘) (KB/s),
-bo: 写入到块设备的数据总理(写磁盘) (KB/s)
随机磁盘读写的时候,这2个 值越大(如超出1M),能看到CPU在IO等待的值也会越大


System
-in: 每秒产生的中断次数
-cs: 每秒产生的上下文切换次数
上面这2个值越大,会看到由内核消耗的CPU时间会越多


Cup
-us: 用户进程消耗的CPU时间百分比
us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了(比如 PHP/Perl)
-sy: 内核进程消耗的CPU时间百分比
sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。
-wa: IO等待消耗的CPU时间百分比
wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。
-id: CPU处在空闲状态时间百分比


情景分析
   这个vmstat的输出那些信息值得关注?
-Procs r: 运行的进程比较多,系统很繁忙
-Io bo: 磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常
Cpu us: 持续大于50,服务高峰期可以接受
Cpu wa: 稍微有些高
Cpu id:持续小于50,服务高峰期可以接受

解决TIME_WAIT过多问题(转)

#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

也就是说,这条命令可以把当前系统的网络连接状态分类汇总。

下面解释一下为啥要这样写:

一个简单的管道符连接了netstat和awk命令。

——————————————————————

先来看看netstat:

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。

——————————————————————

再来看看awk:

/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。

state[]
相当于定义了一个名叫state的数组

NF
表示记录的字段数,如上所示的记录,NF等于6

$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT

state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数

++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一

END
表示在最后阶段要执行的命令

for(key in state)
遍历数组

print key,”\t”,state[key]
打印数组的键和值,中间用\t制表符分割,美化一下。

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

下面附上TIME_WAIT状态的意义:

客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口
状态为TIME_WAIT

是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

主动关闭的一方在发送最后一个 ack 后
就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间
这个是TCP/IP必不可少的,也就是“解决”不了的。

也就是TCP/IP设计者本来是这么设计的
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用很大资源的,除非受到攻击。

还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态


net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
  net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
默  认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

注:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

设置这两个参数: reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recyse是加速TIME-WAIT sockets回收

top详细介绍

序号 列名 含义
          a PID 进程id
          b PPID 父进程id
          c RUSER Real user name
          d UID 进程所有者的用户id
          e USER 进程所有者的用户名
          f GROUP 进程所有者的组名
          g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
          h PR 优先级
          i NI nice值。负值表示高优先级,正值表示低优先级
          j P 最后使用的CPU,仅在多CPU环境下有意义
          k %CPU 上次更新到现在的CPU时间占用百分比
          l TIME 进程使用的CPU时间总计,单位秒
          m TIME+ 进程使用的CPU时间总计,单位1/100秒
          n %MEM 进程使用的物理内存百分比
          o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
          p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
          q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
          r CODE 可执行代码占用的物理内存大小,单位kb
          s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
          t SHR 共享内存大小,单位kb
          u nFLT 页面错误次数
          v nDRT 最后一次写入到现在,被修改过的页面数。
          w S 进程状态。
            D=不可中断的睡眠状态
            R=运行
            S=睡眠
            T=跟踪/停止
            Z=僵尸进程
          x COMMAND 命令名/命令行
          y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
          z Flags 任务标志,参考 sched.h

默认情况下仅显示比较重要的  PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND  列。可以通过下面的快捷键来更改显示内容。
更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z  即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z  可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的  R 键可以将当前的排序倒转。
命令使用
1.  工具(命令)名称
top
2.工具(命令)作用
显示系统当前的进程和其他状况;top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
3.环境设置
在Linux下使用。
4.使用方法
4.1使用格式
top [-] [d] [p] [q] [c] [C] [S]  [s]  [n]
4.2参数说明
d  指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p  通过指定监控进程ID来仅仅监控某个进程的状态。
q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s  使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i  使top不显示任何闲置或者僵死进程。
c  显示整个命令行而不只是显示命令名
4.3其他
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
Ctrl+L 擦除并且重写屏幕。
h或者?  显示帮助画面,给出一些简短的命令总结说明。
k  终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q  退出程序。
r  重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s  改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5  s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O  改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t  切换显示进程和CPU状态信息。
c  切换显示命令名称和完整命令行。
M  根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W  将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

dns扩容记

这个智能DNS也用了有两年多了,还算用得稳定。
之前配置的是主辅两台,且自动解析区分电信网通。
而且,数据是同步的。也就是说,修改了主DNS后,资源记录数据会自动同步到辅DNS上。无需手工修改。
因当时没有作详细的记录文档,也找不到。当时是参考网上的别人的文档来做成的。
所以,这两天要扩容,也就是增加几台机器。
想法是这样。
一台主,四台辅,这样,就算主有问题仍有多台辅,或一机房的主辅有问题,仍有其它机房的顶住。因为当前的两台都在同一机房,所以,是为安全着想,增加几台。也是公司业务发展的需要了。

也因一时找不到文档了。像之前搬迁那样,直接安装,将配置文件等直接拷贝过去。然后修改记录,增加NS记录
但启动后,数据不能同步,是新增的三台不行,以前的那台辅正常可以同步。
便GG了一下。看到些好笑的议论
有些人说,直接拷贝或上传,再重起
有些人说,用rsync同步,再重起
更有人说,这样做同步很懒什么的(看到这句,便想到马云先生语录里对于懒的说法,很精辟的)。


回归正题,上面说到数据不能同步,是重新启动或载入时,主的数据不能同步的其它的辅上。
因为之前的两台是,修改完主,重启,重载,就会自动同步的辅上。现在就新加的三台不行
但有个奇怪的问题。昨天装好后不行,就丢在那了,其实是忙其它的事了
后来看来看到有数据同步的记录,只是失败了。
今天早上来到一看,那些数据都同步了。但修改后,重起,重载,还是不行。奇怪了。难不成一定要他们自己想同步的时候才可以?哈哈

再继续观察和查找问题...

还有一个问题,在之前的那台辅DNS上,能看到一些新增的辅发来的同步信号。
zone domain/IN/view_any: refused notify from non-master: IP#32769
拒绝了,但怎么不是发到主DNS上,发到辅DNS这来
在新增的辅DNS上,看到的记录,是主DNS的IP
在主的DNS上,能看到若是其中两台的同步记录。


上面这些,也写了有一些天了。我的这个一主多辅的智能DNS也搞了一些天,断断续续的搞。
今天再搞,似乎一切都正常了,有点高兴和郁闷,高兴的是怎么突然就好了,郁闷的是,怎么前些天都不行。唯一的不正常,是在每台辅DNS上都会有一个类似这样的记录
zone domain/IN/view_any: refused notify from non-master: IP#32769
每台辅DNS都能收到自身或其它辅DNS的notify请求,但在配置是没有设置这个的呀。还没搞懂原因何在。先留着吧。

想想在这中间有两个关键点
一 是同步KEY设置,就是同步信号的问题
二 是IP匹配的问题,notify,transfer,match-clients 这些的IP设置

 

下面是一些文件的部分
primary
options {
        recursion no;
        listen-on { 127.0.0.1;ip;};
        allow-notify { slave ip list;};
        allow-transfer { slave ip list;};
};

include "ip_tables_tel.txt";

view "view_tele" {
key "tele" {
algorithm hmac-md5;
secret "SWrRvyqCssGsbq25CFezrg==";
};
allow-transfer { key tele; };
match-clients  { key tele;!slave ip list;TEL; };//IP前面要加!才能同步
server slave ip { keys tele; };
.
.
.

zone "." {
type hint;
file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};

include "master/telecom.def";//电信的域名zone文件
};

//网通视图
view "view_cnc" {
..........//格式和上面一样,只是把zone文件分开
}

上面是主的文件,对于辅的文件
只需要修改notify,allo-transfer,match-clients,server,还有zone文件里的type

options {
        recursion no;
        listen-on { 127.0.0.1;ip;};
        allow-notify { primary ip;};
        allow-transfer { none;};
};
view "view_tele" {
key "tele" {
algorithm hmac-md5;
secret "SWrRvyqCssGsbq25CFezrg==";
};
allow-transfer { none; };
match-clients  { key tele;!primary ip;TEL; };
server primary ip  { keys tele; };

zone "." {
type hint;
file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};

include "master/telecom.def";
};

Records:271234