linux服务器的性能负载上限,第1张

1、你跑的是什么应用?

2、是否有应用闲忙时?

3、最好有个脚本收集一下进程数、处理器占用率、内存占用率、磁盘读写压力等信息

不能简单的说负载超量,这个跟你当时系统应用的设计有关系,这个服务器需要支撑什么样的应用压力应该在设计阶段就应该评估好的。

cpu2的使用率最高也没有超过85%,应该不是系统瓶颈,如果你没有什么多链路聚合的配置,你的网络传输应该就是瓶颈。

1,Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息。但是对于双核的cpu,在cpuinfo中会看到两个cpu。常常会让人误以为是两个单核的cpu。

其实应该通过Physical Processor ID来区分单核和双核。而Physical Processor ID可以从cpuinfo或者dmesg中找到 flags 如果有 ht 说明支持超线程技术 判断物理CPU的个数可以查看physical id 的值,相同则为同一个物理CPU

2,查看内存大小:

cat /proc/meminfo |grep MemTotal

3,其他一些可以查看详细linux系统信息的命令和方法:

uname -a # 查看内核/操作系统/CPU信息的linux系统信息命令

head -n 1 /etc/issue # 查看操作系统版本,是数字1不是字母L

cat /proc/cpuinfo # 查看CPU信息的linux系统信息命令

hostname # 查看计算机名的linux系统信息命令

lspci -tv # 列出所有PCI设备

lsusb -tv # 列出所有USB设备的linux系统信息命令

lsmod # 列出加载的内核模块

env # 查看环境变量资源

free -m # 查看内存使用量和交换区使用量

df -h # 查看各分区使用情况

du -sh # 查看指定目录的大小

grep MemTotal /proc/meminfo # 查看内存总量

grep MemFree /proc/meminfo # 查看空闲内存量

uptime # 查看系统运行时间、用户数、负载

cat /proc/loadavg # 查看系统负载磁盘和分区

mount | column -t # 查看挂接的分区状态

fdisk -l # 查看所有分区

swapon -s # 查看所有交换分区

hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)

dmesg | grep IDE # 查看启动时IDE设备检测状况网络

ifconfig # 查看所有网络接口的属性

iptables -L # 查看防火墙设置

route -n # 查看路由表

netstat -lntp # 查看所有监听端口

netstat -antp # 查看所有已经建立的连接

netstat -s # 查看网络统计信息进程

ps -ef # 查看所有进程

top # 实时显示进程状态用户

w # 查看活动用户

id # 查看指定用户信息

last # 查看用户登录日志

cut -d: -f1 /etc/passwd # 查看系统所有用户

cut -d: -f1 /etc/group # 查看系统所有组

crontab -l # 查看当前用户的计划任务服务

chkconfig –list # 列出所有系统服务

chkconfig –list | grep on # 列出所有启动的系统服务程序

rpm -qa # 查看所有安装的软件包

cat /proc/cpuinfo :查看CPU相关参数的linux系统命令

cat /proc/partitions :查看linux硬盘和分区信息的系统信息命令

cat /proc/meminfo :查看linux系统内存信息的linux系统命令

cat /proc/version :查看版本,类似uname -r

cat /proc/ioports :查看设备io端口

cat /proc/interrupts :查看中断

cat /proc/pci :查看pci设备的信息

cat /proc/swaps :查看所有swap分区的信息

一、查看哪些IP连接本机

netstat -an

二、查看TCP连接数

1)统计80端口连接数

netstat -nat|grep -i "80"|wc -l

2)统计httpd协议连接数

ps -ef|grep httpd|wc -l

3)、统计已连接上的,状态为“established

netstat -na|grep ESTABLISHED|wc -l

4)、查出哪个IP地址连接最多,将其封了

netstat -na|grep ESTABLISHED|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n

netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n

---------------------------------------------------------------------------------------------

1、查看apache当前并发访问数:

netstat -an | grep ESTABLISHED | wc -l

对比httpdconf中MaxClients的数字差距多少。

2、查看有多少个进程数:

ps aux|grep httpd|wc -l

3、可以使用如下参数查看数据

server-statusauto

#ps -ef|grep httpd|wc -l

1388

统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。

表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。

#netstat -nat|grep -i "80"|wc -l

4341

netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。

最终返回的数字就是当前所有80端口的请求总数。

#netstat -na|grep ESTABLISHED|wc -l

376

netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。

最终返回的数字就是当前所有80端口的已建立连接的总数。

netstat -nat||grep ESTABLISHED|wc - 可查看所有建立连接的详细记录

查看Apache的并发请求数及其TCP连接状态:

  Linux命令:

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

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

TIME_WAIT 8947 等待足够的时间以确保远程TCP接收到连接中断请求的确认

FIN_WAIT1 15 等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN_WAIT2 1 从远程TCP等待连接中断请求

ESTABLISHED 55 代表一个打开的连接

SYN_RECV 21 再收到和发送一个连接请求后等待对方对连接请求的确认

CLOSING 2 没有任何连接状态

LAST_ACK 4 等待原来的发向远程TCP的连接中断请求的确认

TCP连接状态详解

LISTEN: 侦听来自远方的TCP端口的连接请求

SYN-SENT: 再发送连接请求后等待匹配的连接请求

SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED: 代表一个打开的连接

FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2: 从远程TCP等待连接中断请求

CLOSE-WAIT: 等待从本地用户发来的连接中断请求

CLOSING: 等待远程TCP对连接中断的确认

LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED: 没有任何连接状态

  LAST_ACK 5

  SYN_RECV 30

  ESTABLISHED 1597

  FIN_WAIT1 51

  FIN_WAIT2 504

  TIME_WAIT 1057

  其中的

SYN_RECV表示正在等待处理的请求数;

ESTABLISHED表示正常数据传输状态;

TIME_WAIT表示处理完毕,等待超时结束的请求数。

---------------------------------------------------------------------------------------------

查看Apache并发请求数及其TCP连接状态

查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):

  Linux命令:

ps -ef | grep httpd | wc -l

  返回结果示例:

  1388

  表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整,我这组服务器中每台的峰值曾达到过2002。

查看Apache的并发请求数及其TCP连接状态:

  Linux命令:

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

返回结果示例:

  LAST_ACK 5

  SYN_RECV 30

  ESTABLISHED 1597

  FIN_WAIT1 51

  FIN_WAIT2 504

  TIME_WAIT 1057

  其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

  状态:描述

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

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

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

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

  ESTABLISHED:正常数据传输状态

  FIN_WAIT1:应用说它已经完成

  FIN_WAIT2:另一边已同意释放

  ITMED_WAIT:等待所有分组死掉

  CLOSING:两边同时尝试关闭

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

  LAST_ACK:等待所有分组死掉

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,

vim /etc/sysctlconf

编辑文件,加入以下内容:

netipv4tcp_syncookies = 1

netipv4tcp_tw_reuse = 1

netipv4tcp_tw_recycle = 1

netipv4tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效。

netipv4tcp_syncookies = 1 表示开启SYN cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

netipv4tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

netipv4tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

netipv4tcp_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 状态

如何合理设置apache httpd的最大连接数?

手头有一个网站在线人数增多,访问时很慢。初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种现象就是说明apache最大连接数已经满了,新的访客只能排队等待有空闲的链接,而如果一旦连接上,在keeyalive 的存活时间内(KeepAliveTimeout,默认5秒)都不用重新打开连接,因此解决的方法就是加大apache的最大连接数。

1在哪里设置?

apache 224,使用默认配置(FreeBSD 默认不加载自定义MPM配置),默认最大连接数是250

在/usr/local/etc/apache22/httpdconf中加载MPM配置(去掉前面的注释):

# Server-pool management (MPM specific)

Include etc/apache22/extra/httpd-mpmconf

可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpmconf,但里面根据httpd的工作模式分了很多块,哪一部才是当前httpd的工作模式呢?可通过执行 apachectl -l 来查看:

Compiled in modules:

corec

preforkc

http_corec

mod_soc

看到prefork 字眼,因此可见当前httpd应该是工作在prefork模式,prefork模式的默认配置是:

<IfModule mpm_prefork_module>

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 150

MaxRequestsPerChild 0

</IfModule>

2要加到多少?

连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。

查看当前的连接数可以用:

ps aux | grep httpd | wc -l

或:

pgrep httpd|wc -l

计算httpd占用内存的平均数:

ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'

由于基本都是静态页面,CPU消耗很低,每进程占用内存也不算多,大约200K。

服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩15G可用,那么理论上可以支持15102410241024/200000 = 805306368

约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅)

控制最大连接数的MaxClients ,因此可以尝试配置为:

<IfModule mpm_prefork_module>

StartServers 5

MinSpareServers 5

MaxSpareServers 10

ServerLimit 5500

MaxClients 5000

MaxRequestsPerChild 100

</IfModule>

注意,MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重启httpd时会有提示。

重启httpd后,通过反复执行pgrep httpd|wc -l 来观察连接数,可以看到连接数在达到MaxClients的设值后不再增加,但此时访问网站也很流畅,那就不用贪心再设置更高的值了,不然以后如果网站访问突增不小心就会耗光服务器内存,可根据以后访问压力趋势及内存的占用变化再逐渐调整,直到找到一个最优的设置值。

(MaxRequestsPerChild不能设置为0,可能会因内存泄露导致服务器崩溃)

更佳最大值计算的公式:

apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) 2

apache_max_process = apache_max_process_with_good_perfermance 15

附:

实时检测HTTPD连接数:

watch -n 1 -d "pgrep httpd|wc -l"

  公司使用的服务器是linux的操作系统,之前很长一段时间监控系统参数都是使用top等linux命令来监控

  这样做的好处

  1可以非常容易的监控的系统的状态

  2实时性非常强

  不足之处

  1不能和loadrunner其他的图表进行合并,造成了很难在事后分析出系统的问题

  2监控系统的数据无法直接保存,供下次参考使用

  最近终于说服了公司的sa,让我能在性能测试环境做必要的设置,因为之前sa一直认为我要做的事情会对系统的安全性造成影响。

  现在我来介绍一下如何在linux设置来完成loadrunner对服务器性能的监控

  A验证服务器上是否配置了rstatd守护程序

  1 rup 127001

  2find / -name rpcrstatd

  3/usr/sbin/rpcinfo -p

  B下载rpcrstatd

  

  C打开端口映射

  1执行 setup命令

  这时会弹出一个类似图形化的界面,光标移动到System services,回车。在新界面中找到portmap项,空格选中。然后选择OK,再选择quit。

  2/etc/rcd/initd/portmap start //启动portmap

  D编译安装rstatd

  /configure

  make all-am

  make install-am

  E起rstatd服务

  /usr/local/sbin/rpcrstatd

  F安装xinetd服务

  yum install xinetdi386

  /sbin/service xinetd restart

  好了,liunx中的设置基本上都已经设置完了,接下来只要到loadrunner中加上对相应服务的监控就可以了

LINUX 查看服务器硬件配置命令如下:

系统

# uname -a # 查看内核/操作系统/CPU信息

# head -n 1 /etc/issue # 查看操作系统版本

# cat /proc/cpuinfo # 查看CPU信息

# hostname # 查看计算机名

# lspci -tv # 列出所有PCI设备

# lsusb -tv # 列出所有USB设备

# lsmod # 列出加载的内核模块

# env # 查看环境变量

资源

# free -m # 查看内存使用量和交换区使用量

# df -h # 查看各分区使用情况

# du -sh <目录名> # 查看指定目录的大小

# grep MemTotal /proc/meminfo # 查看内存总量

# grep MemFree /proc/meminfo # 查看空闲内存量

# uptime # 查看系统运行时间、用户数、负载

# cat /proc/loadavg # 查看系统负载

磁盘和分区

# mount | column -t # 查看挂接的分区状态

# fdisk -l # 查看所有分区

# swapon -s # 查看所有交换分区

# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)

# dmesg | grep IDE # 查看启动时IDE设备检测状况

网络

# ifconfig # 查看所有网络接口的属性

# iptables -L # 查看防火墙设置

# route -n # 查看路由表

# netstat -lntp # 查看所有监听端口

# netstat -antp # 查看所有已经建立的连接

# netstat -s # 查看网络统计信息

进程

# ps -ef # 查看所有进程

# top # 实时显示进程状态

用户

# w # 查看活动用户

# id <用户名> # 查看指定用户信息

# last # 查看用户登录日志

# cut -d: -f1 /etc/passwd # 查看系统所有用户

# cut -d: -f1 /etc/group # 查看系统所有组

# crontab -l # 查看当前用户的计划任务

服务

# chkconfig --list # 列出所有系统服务

# chkconfig --list | grep on # 列出所有启动的系统服务

程序

# rpm -qa # 查看所有安装的软件包

其他常用命令整理如下:

查看主板的序列号:dmidecode | grep -i 'serial number'

用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)

查看CPU信息:cat /proc/cpuinfo [dmesg | grep -i 'cpu'][dmidecode -t processor]

查看内存信息:cat /proc/meminfo [free -m][vmstat]

查看板卡信息:cat /proc/pci

查看显卡/声卡信息:lspci |grep -i 'VGA'[dmesg | grep -i 'VGA']

查看网卡信息:dmesg | grep -i 'eth'[cat /etc/sysconfig/hwconf | grep -i eth][lspci | grep -i 'eth']

查看PCI信息:lspci (相比cat /proc/pci更直观)

查看USB设备:cat /proc/bus/usb/devices

查看键盘和鼠标:cat /proc/bus/input/devices

查看系统硬盘信息和使用情况:fdisk & disk – l & df

查看各设备的中断请求(IRQ):cat /proc/interrupts

查看系统体系结构:uname -a

查看及启动系统的32位或64位内核模式:isalist –v [isainfo –v][isainfo –b]

查看硬件信息,包括bios、cpu、内存等信息:dmidecode

测定当前的显示器刷新频率:/usr/sbin/ffbconfig –rev

查看系统配置:/usr/platform/sun4u/sbin/prtdiag –v

查看当前系统中已经应用的补丁:showrev –p

显示当前的运行级别:who –rH

查看当前的bind版本信息:nslookup –class=chaos –q=txt versionbind

查看硬件信息:dmesg | more

显示外设信息, 如usb,网卡等信息:lspci

查看已加载的驱动:

lsnod

lshw

查看当前处理器的类型和速度(主频):psrinfo -v

打印当前的OBP版本号:prtconf -v

查看硬盘物理信息(vendor, RPM, Capacity):iostat –E

查看磁盘的几何参数和分区信息:prtvtoc /dev/rdsk/c0t0d0s

显示已经使用和未使用的i-node数目:

df –F ufs –o i

isalist –v

对于“/proc”中文件可使用文件查看命令浏览其内容,文件中包含系统特定信息:

主机CPU信息:Cpuinfo

主机DMA通道信息:Dma

文件系统信息:Filesystems

主机中断信息:Interrupts

主机I/O端口号信息:Ioprots

主机内存信息:Meninfo

Linux内存版本信息:Version

备注: proc – process information pseudo-filesystem 进程信息伪装文件系统

如果是web服务器,用到程序与数据库交互的服务器,您报出的硬件配置,负载6以内可以稳定运行,负载12以内可以正常运行,负载高于15运行吃力,负载18以上明显感觉变慢,更高可能就运行出错了。我指的是一般情况下。

如果是特殊情况,内部机制导致的服务宕机假死,那么负载值的呈现可能不高的,但是有问题的服务已经不能正常工作了,需要重启这个服务,一旦重启这个假死的服务进程,系统负载就会立刻随之升高,因为可能随着重启这个服务进程之后,服务突然能响应了堆积的并发请求,导致突发性升高,然后可能迅速降低负载。 所以负载是表示系统的综合运行载荷,不完全是cpu的占用率。 在linux系统里,几种情况都可以导致负载高:1系统进程占用时间过长 2应用程序的进程占用cpu时间过长 3磁盘读写I/O的进程占用cpu的时间过长。 是否稳定运行,不能单单以负载值作为评估标准,只能作为大概的参考。负载高的原因要从我之前说的3个原因方面去查,查到了问题后,就可以改进改善,从而实现稳定运行。

其实有很多特例的,据我所知,某些大型的知名网站服务器原来采用lamp架构的,在负载100以上都能正常运行,这么高的负载其实在某些情况下特别是大规模并发情况下,只要把控好软硬件的协作关系,照样可以正常运作。

我从事linux网站运维数年了,希望我的回答你能满意。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » linux服务器的性能负载上限

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情