怎样诊断系统高负载问题?

Posted on Fri 09 December 2011 in 我用(IT) • Tagged with linux

最近一个每日40万PV的应用经常挂点,少壮们努力奋斗,终于定位到了问题。把分析方法和大家分享一下。

Uptime - 查看系统平均负载

Load是指在指定时间段内等待运行队列中等待进程的数量,时间段如下: load average: 1min, 5min, 15min 通常,当一个系统出现高负载时就会出现不响应或运行缓慢甚至造成系统中的应用服务异常—我们必须降低负载来提升系统响应。 要想解决,我们必须知道是什么原因造成的高负载。

造成负载过高的原因

当一个线程无法获得以下资源时,就会进行等待。 CPU I/O:Disk 或 Network 当CPU不够强大或因为某种问题存在IO阻塞时,系统负载就会过高。

定位问题的一般步骤

Top - 对CPU进行判断

首先我们看一下top命令 -bash-3.2$top

top - 17:27:17 up 42 days, 6:09, 5 users, load average: 0 ...


Continue reading

Vim配置

Posted on Thu 08 December 2011 in 我用(IT) • Tagged with linux, 命令行工具

最近Vim用得比较多,发现朋友们博客上的配置介绍写得非常好,让我轻松就完成了配置。 强烈推荐呼噜猫的配置说明。 坚毅的刀刀的这篇文章也请参考。

简要操作步骤

在启动Vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本。

创建当前用户的.vimrc文件的命令如下: $vi ~/.vimrc 设置完后 :wq 进行保存退出即可。

我现在Mac上用的.vimrc

" 更详细的.vimrc参考: http://vi-improved.org/vimrc.html

" Basics { set nocompatible " explicitly get out of vi-compatible mode "set noexrc " don't use local version of .(g)vimrc, .exrc set ...


Continue reading

测试系统单进程的线程数上限(1)

Posted on Wed 23 November 2011 in 我思 • Tagged with linux

前言

根据目前从网络上搜集到的信息来看,特定系统下一个应用进程能够开启的线程上限是受多方面因素影响(OS寻址范围、堆栈大小、OS限制、物理内存及交换区大小),具体哪个因素成为系统中的瓶颈,必须具体问题具体分析。而想要获得性能最优的线程数,就更是和具体应用方式关联在一起了。 不如直接测试,拿结果来反推更可靠一些。

我会先分析一下影响单进程创建线程数的瓶颈,然后再给出测试方法以及具体的测试代码和测试步骤,希望为广大系统工程师和程序员们提供一些有价值的帮助。

可能成为瓶颈的因素

32位系统的线程数瓶颈

对32位系统来说,理论上的寻址范围是4G(2^32),但实际系统还要预留系统空间用于自身管理,一般来说真正的最大寻址范围都要小于4G。 对于Linux来说,一个进程拥有的用户空间为0~0xBFFFFFFF,共3G;Windows的到0x7FFFFFFF,只有2G。(32位系统的寻址范围还可以扩大,应用某些扩展标准,例如PAE,最多能支持到16G到64G不等。但这个情况不在我的讨论范围)。 一个LInux进程在用户态最多访问3G内存,每个线程必须占用特定大小的堆栈空间(stack size),这个因素使32位系统创建的线程数不可能超过n
n=310001000k/StackSize
注:Stack Size可以用ulimit -s ...


Continue reading

介绍一个多线程下载工具Axel

Posted on Fri 11 November 2011 in it • Tagged with HTTP, linux

介绍

主页:http://axel.alioth.debian.org/ 和wget和curl相比,最大的亮点是支持多线程。

Axel tries to accelerate HTTP/FTP downloading process by using multiple connections for one file. It can use multiple mirrors for a download.

效果

多线程与单线程下载效果对比:195.61 KB/s VS 88.5 KB/s

axel -o . -n 5 http://li3huo.com ...


Continue reading

Linux Socket连接上限的查看及配置

Posted on Fri 10 June 2011 in 我用(IT) • Tagged with linux, 系统监控

查看Socket连接上限

有测试工具,叫ttcp。不过对于线上的服务器,靠实测实在是过于狼虎的方法了。 http://renoir.csc.ncsu.edu/ttcp/

除了实测,还可以通过观察监控日志来找到这个上限值,不过往往已经损失惨重了。 拿Cacti来说,观察"Open Sockets"图表,不同负载情况的total socke 的 maxinum如果是一个定值的话,显然已经达到上限了。 http://docs.cacti.net/ Cacti的这个监控就是调用了sar的监控结果,其实就是把sar -n SOCK(sysstat)进行了汇总并生成了图像查询界面

5秒钟采样一次,一共统计2次的输出结果如下

$ sar -n SOCK 5 2 Linux 2.6.18-164.el5 (baiqi) 06/10/2011 ...


Continue reading