明明白白你的Linux服务器-硬件篇

[ 2010-12-11 00:41:32 | 作者: admin ]
字号: | |
《明明白白你的Linux服务器》系列的第一篇

一、如何查看服务器的CPU
今天安装了9台Linux服务器,型号完全不一样(有DELL、HP和IBM服务器),又懒得去对清单,如何在Linux下cpu的个数和核数呢?另外,nginx的cpu工作模式也需要确切的知道linux服务器到底有多少个逻辑cpu,不过现在服务器那是相当的彪悍,直接上worker_processes 8吧。
判断依据:
1.具有相同core id的cpu是同一个core的超线程。(Physical id and core id are not necessarily consecutive but they are unique. Any cpu with the same core id are hyperthreads in the same core.)
2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores。(Any cpu with the same physical id are threads or cores in the same physical socket.)
以自己的惠普DL380G6为例说明:
①物理cpu个数:
[root@localhost ~]# cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l②每个物理cpu中core的个数(即核数)
[root@localhost ~]# cat /proc/cpuinfo | grep “cpu cores” | uniq cpu cores : 4这样可以推算出自己服务器的逻辑CPU为物理个数*核数,如果你的服务器是server2003,你可以在你的资源管理器里以图形化方式看到你的逻辑CPU个数。
二、查看服务器的内存情况
有时候,你运行了许多大的进程,比如你开启了300个fast-cgi。这时候你感觉系统很慢,便需要查看服务器的内存情况:
[root@server ~]# free -m total used free shared buffers cached Mem: 249 163 86 0 10 94 -/+ buffers/cache: 58 191 Swap: 511 0 511参数解释:
total 内存总数 used 已经使用的内存数 free 空闲的内存数 shared 多个进程共享的内存总额 buffers Buffer Cache和cached Page Cache 磁盘缓存的大小 -buffers/cache (已用)的内存数:used – buffers – cached +buffers/cache(可用)的内存数:free + buffers + cached 可用的memory=free memory+buffers+cached上面的数值是一台我公司内网供PHP开发人员使用的DELL PE2850,内存为2G的服务器,其可使用内存为=217+515+826。记住,Linux的内存使用管理机制是有多少就用多少(特别是在频繁存取文件后),即Linux内存不是拿来看的,是拿来用的。

编辑推荐:Linux系统内存监控全面讲解:free命令

三、服务器磁盘使用情况
有时感觉硬盘反映很慢,或需要查看日志所在分区时,下列命令可以查看磁盘的使用情况,很有用:

①查看硬盘分区情况

fdisk –l

②查看当前硬盘使用情况

df –h

③查看硬盘性能

# iostat -x 1 10
Linux 2.6.18-92.el5xen 03/01/2010
avg-cpu: %user %nice %system %iowait %steal %idle
1.10 0.00 4.82 39.54 0.07 54.46
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 3.50 0.40 2.50 5.60 48.00 18.48 0.00 0.97 0.97 0.28
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.10 0.30 0.20 2.40 2.40 9.60 0.00 1.60 1.60 0.08
sdf 17.40 0.50 102.00 0.20 12095.20 5.60 118.40 0.70 6.81 2.09 21.36
sdg 232.40 1.90 379.70 0.50 76451.20 19.20 201.13 4.94 13.78 2.45 93.16

像我们公司,开发人员占多数。有时为了节约成本,会同时采购一些性价比比较高的二手服务器;这时一般将服务器的硬件的工作模式设置为RAID1,同时对几种型号的服务器作相同文件的写操作,然后各自执行iostat –d,作对比性测试。这样服务器的硬盘性能孰优孰劣,一下子就能对比出来。

图解:

Tps 该设备每秒I/O传输的次数(每秒的I/O请求)

Blk_read/s 表求从该设备每秒读的数据块数量

Blk_wrth/s 表示从该设备每秒写的数据块数量

四、查看系统内核
查看系统内核主要为了掌握其版本号,为安装LVS等软件做准备。
uname –a有关查看内核信息的更多指令,可参考Linux查看版本信息及CPU内核、型号等一文。有关Linux的内核优化,则可参考Linux 2.6.31内核优化指南一文。
五、查看服务器使用的Linux发行版的名称、版本号及描述信息等
lsb_release -a这是我的某台用于SVN实验的vmware机器情况:

六、查看服务器的平均负载
感觉到系统压力较大时用可top或uptime查看下服务器的平均负载。uptime的另一个用法是查看你的Linux服务器已经稳定运行多少天没有重启了,我这边的机器最高记录是360多天。
七、查看系统整体性能情况
如果感觉系统比较繁忙,可以用vmstat查看系统整体性能情况。vmstat不仅仅适应于linux系统,它一样适用于FreeBSD等unix系统。
vmstat 1 2如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。
编辑推荐:Linux系统监控工具之vmstat详解

八、查看系统已载入的相关模块
Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。你可以将这些功能编译成一个个单独的模块,待需要时再分别载入。比如说在安装LVS+Keepalived,下列用法被经常用到:

#检查内核模块,看一下ip_vs是否被加载
lsmod |grep ip_vs
ip_vs 77313 0

如果要查看当前系统的已加载模块,直接lsmod。

九、Linux下查找PCI设置
有时需要在Linux下查找PCI设置,可用lspci命令,它可以列出机器中的PCI 设备,比如声卡、显卡、Modem、网卡等,主板集成设备也能列出来。lspci 读取的是hwdata 数据库。有的小伙可能和我一样,最关心的还是网卡型号:

[root@mail ~]# lspci | grep Ethernet
03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
07:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)


至于网络流量的监控,建议用centos自带的工具iptraf,其用法可参考这篇文章。
掌握上面这九条,你对你的Linux服务器的硬件信息基本就可以随时掌控了。



《明明白白你的Linux服务器》系列的第二篇

前言:这篇文章是明明白白你的Linux服务器-硬件篇的续篇
希望大家看完此文后,能很清楚明白你的服务器的网络情况,能很轻松的配置其网络环境。Linux服务器在装完系统,配置其网络环境是每一个system administrator的职能。
一、服务器的网络配置
在服务器的网络配置时,喜欢图形的朋友可用setup或system-config-network来配置。
网卡配置文件为/etc/sysconfig/network-scripts/ifcfg-eth0,设置完毕后直接用service network restart生效

1. [root@linpcl root]#cat /etc/sysconfig/networking/devices/ifcfg-rth0
2. DEVICE=eth0
3. ONBOOT=yes
4. BOOTPROTO=static
5. IPADDR=192.168.0.2
6. NETMASK=255.255.255.0
7. GATEWAY=192.168.0.1

GATEWAY选项可以设置网关参数,这里注意下ONBOOT选项,它表示网卡是否随系统启动而启动,此项一定要设置成on
这里介绍二个不是太常用的参数USERCTL=no,即不允许普通用户修改网卡
PEERDNS=yes,它表示允许从DHCP获得的DNS覆盖本地的DNS

查看本机所有的网卡情况 ifconfig –a,更高级的网卡路由命令用ip addr,特别是你的服务器由keepalived绑定了虚拟VIP后用其查看很方便查看本机路由 netstat –rn或route

增加一条本机网络路由用命令route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.25,即增加一条网络172.16.6.0/24 经过172.16.2.254 ,这个地址也可以理解为你的下一跳的地址

删除路由用命令route del –net 172.16.86.0/24

如果要永久的生效可用文件编辑的办法

vim /etc/sysconfig/network-scripts/route-eth0
172.16.6.0/24 via 172.16.2.25

查看本机的DNS服务器 cat /etc/resolv.conf
查看主机名hostname
查看主机名对应的IP地址 /etc/hosts

它的执行顺序是优于DNS的,现在多用于集群环境,比如Heartbeat;还有一个妙用,在没用DNS的环境中做测试时,直接改服务器的此文件,达到优先解析的目的查看与本机直连的网络设备用命令arp

这里跟大家介绍一个很有用的工具,mii-tool,判断哪块网卡连接了网线,同事们靠抽插网线来判断哪个网卡连接了网线的办法比较没有效率

1. [root@mail~]#mii-tool
2. eth0: negotiated 100baseTx-FD flow-control, link ok
3. SIOCGMIIPHY on ‘eth1′ failed: Resource temporarily unavailable

大家看这段文字可能没什么感觉,但到了机房就非常有用了,特别是那些网卡多的服务器,我见得最多的某台Linux服务器上绑定了六块网卡。

二、查看你的服务器网络连接状态

1. netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
2. LAST_ACK 14
3. SYN_RECV 348
4. ESTABLISHED 70
5. FIN_WAIT1 229
6. FIN_WAIT2 30
7. CLOSING 33
8. TIME_WAIT 18122

状态:描述

◆CLOSED:无连接是活动的或正在进行

◆LISTEN:服务器在等待进入呼叫

◆SYN_RECV:一个连接请求已经到达,等待确认

◆SYN_SENT:应用已经开始,打开一个连接

◆ESTABLISHED:正常数据传输状态

◆FIN_WAIT1:应用说它已经完成

◆FIN_WAIT2:另一边已同意释放

◆ITMED_WAIT:等待所有分组死掉

◆CLOSING:两边同时尝试关闭

◆TIME_WAIT:另一边已初始化一个释放

◆LAST_ACK:等待所有分组死掉
ESTABLISHED的值其实也是当前的并发数,这个可重点关注下;另外,可关注下TIME——WAIT这项的数值。Linux下高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量,具体可参见我的另一篇文章:优化Linux生产服务器的经验之谈。

三、 寻找恶意IP并用iptables禁止掉
找出恶意连接你的服务器80端口的IP,直接用iptables来drop掉它;这里建议写脚本来运行,有兴趣的请参考我在51cto.com里发表的自动分析黑名单及白名单的iptables脚本一文
netstat -an| grep :80 | grep -v 127.0.0.1 |awk ‘{ print $5 }’ | sort|awk -F:
‘{print $1,$4}’ | uniq -c | awk ‘$1 >50 {print $1,$2}’iptables脚本执行完毕后,用iptables –nv –L 可查看其规则,下面的iptables语法比较详细,推荐记忆
iptables [-t表名] <-A| I |D |R > 链名[规则编号] [-i | o 网卡名称] [-p 协议类型] [-s 源IP地址 | 源子网][--sport 源端口号] [-d 目标IP地址 | 目标子网][--dport 目标端口号] <-j 动作>
四、SMTP会话处理方式
捕获一个SMTP会话,以下命令很管用,推荐下 ;不喜欢用命令的同学我推荐用wireshark

1. tcpdump -vv –x –X –s 1500 `port 25`
五、打印自动运行服务
打印出自动运行的服务,3、5级别的即可;当然喜欢图形的同学可用ntsysv工具。

1. [root@ltos test]# chkconfig -list | grep 3:on | awk ‘{print $1,$5}’
2. [root@ltos test]# chkconfig –list | grep 5:on | awk ‘{print $1,$7}’
六、使用Netstat查看协议数据
Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

1. NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
2. -a 显示所有连接和监听端口。
3. -b 显示包含于创建每个连接或监听端口的可执行组件。
4. -e 显示以太网统计信息。此选项可以与-s选项组合使用。
5. -n 以数字形式显示地址和端口号。
6. -o 显示与每个连接相关的所属进程 ID。
7. -p proto 显示 proto 指定的协议的连接。
8. -r 显示路由表。
9. -s 显示按协议统计信息。
一般用得比较多的就是netstat -an与netstat –rn

七、使用lsof查看文件信息
在unix里面,一切皆文件;而Linux秉承了这一特性,将unix下的工具lsof移植过来得很成功。lsof可以列出被进程所打开的文件的信息。
被打开的文件可以是
1.普通的文件
2.目录
3.网络文件系统的文件
4.字符设备文件
5.(函数)共享库
6.管道,命名管道
7.符号链接
8.底层的socket字流。网络socket,unix域名socket,用得比较多的用法是lsof -i:端口号,列出谁在使用某个端口,例如:lsof -i :3306,我喜欢用此用法来判断服务到底有没有正常启用。
八、使用fuser查看和杀死相关进程
与lsof –i的用法相法,如果我想查找占用3306端口的程序,则用fuser –n tcp -v 8080,另外,fuser的其它功能也是很强大的,我常用的它的两个功能:查看我需要的进程和我要杀死我查到的进程(抚琴煮酒是一般用来解决device is busy的问题)
比如当你想umount光驱的时候,结果系统提示你设备正在使用或者正忙,可是你又找不到到底谁使用了他。这个时候fuser可派上用场了。

1. [root@lancy sbin]# eject
2. umount: /media/cdrom: device is busy
3. umount: /media/cdrom: device is busy
4. eject: unmount of `/media/cdrom’ failed
5.
6. [root@lancy sbin]# fuser /mnt/cdrom
7. /mnt/cdrom: 4561c 5382c
8.
9. [root@lancy sbin]# ps -ef |egrep ‘(4561|5382)’ |grep -v grep
10. root 4561 4227 0 20:13 pts/1 00:00:00 bash
11. root 5382 4561 0 21:42 pts/1 00:00:00 vim Autorun.inf
示例中,我想弹出光驱,系统告诉我设备忙着,于是采用fuser命令,参数是你文件或scoket,fuser将查出那些使用了他。4561c,5382c表示目前用两个进程在占用着/mnt/cdrom,分别是4561,5382,进程ID后的字母表示占用资源的方式。

九、TCP_wrappers防火墙
linux上一种特殊的防火墙TCP_wrappers防火墙,TCP 封包会先经过所谓的 IP 过滤机制( IP Filtering ),这是 Linux 提供的第一层保护,他可以将你不想要的来源 IP (经由 TCP 封包的 Head 资料)先当掉再说!如果可以通过的话,在就是要通过TCP_wrappers过滤。如果上面两个都通过了,再就根据每个服务访问控制的设定决定客户机能得到不同的权限和信息.TCP_wrappers防火墙主要涉及到两个文件/etc/hosts.allow和/etc/hosts.deny,可作iptables的补充来保护你的Linux安全,比如只允许内网IP访问你的NFS服务器。
这里说下Linux是怎么识别其顺序的,这里好多朋友容易混淆了;当某个ip想访问你的Linux下的特定服务时,系统首先会检查/etc/hosts.alllow文件,如是有的话就放行,没有的话继续检查/etc/hosts.deny文件,有的话拒绝,没有的就放行,不过一般的做法就直接在/etc/hosts.allow里放允许通行的ip,/etc/hosts.deny里放不允许通行的ip。另外,这里跟大家分享一个经验心得吧: Linux下的服务众多,samba,nfs,rsync,tcp_wrapper,xinetd等,而每个又都有各自支持的写法,这样对于考试学习及工作记忆很不方便,其实它们都支持192.168.0.1/255.255.255.0这样的点分十进制写法;另,iptables是不支持的,它只支持192.168.0.1/24比特建网制。
十、推荐下Linux/unix中常用的扫描端口工具-Nmap
下面是Nmap支持的四种最基本的扫描方式:

1. TCP connect()端口扫描(-sT参数,-sP是用于扫描整个局域网段)
2. TCP同步(SYN)端口扫描(-sS参数)
3. UDP端口扫描(-sU参数)
4. TCP ACK扫描(-sA参数)
我这里以自己的线上邮件服务器为例说明下:

1. [root@mail postfix]# nmap -P0 -sS 211.143.6.X
2. Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-03-29 16:21 CST
3. Interesting ports on 211.143.6.X:
4. Not shown: 1668 closed ports
5. PORT STATE SERVICE
6. 22/tcp open ssh
7. 25/tcp open smtp
8. 80/tcp open http
9. 110/tcp open pop3
10. 111/tcp open rpcbind
11. 143/tcp open imap
12. 443/tcp open https
13. 465/tcp open smtps
14. 587/tcp open submission
15. 993/tcp open imaps
16. 995/tcp open pop3s
17. 1014/tcp open unknown
lsof -i:1014,发现又是rpc.statd,这东东,每次用的端口都不一样啊;它不能正确处理SIGPID信号,远程攻击者可利用这个漏洞关闭进程,进行拒绝服务攻击;发现rpc.statd是由服务nfslock开启,关闭它即可service nfslock stop;chkconfig nfslock off


关于网站的安全,我这里也有一些自己的浅见,特与大家共享下:

1. iptables最好写成脚本形式,想开哪个端口开哪个,想关哪个关哪个,iptables服务都可关闭;可以用crontab每5分钟自动关闭一次iptables,注意别把自己SSH停掉了,毕竟公司离机房还是很远的!
2. 不定期扫描,发现可疑端口就关闭,实在不太懂就cat /etc/services或google下查找端口。
3. 多注意连接数和系统性能,有时能从上面发现问题,有条件的话就布置nagois监控服务器。
4. 建议掌握netcat、hping、nmap、等安全工具及网络分析工具tcpdump或wireshark,配合监测iptables的安全策略。
5. 多注意自己服务器的内核漏洞,毕竟现在的linux攻击都是内核级的;请至少保证内核为2.6.9以上(不含2.6.9)。
6. 密切关注防火墙日志/var/log/messages。
[最后修改由 admin, 于 2010-12-11 00:47:36]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=1589

这篇日志没有评论。

此日志不可发表评论。