怎样DEBUG 进程IO消耗大的问题

本文介绍了一种诊断CGI程序磁盘IO突然升高的方法,包括使用top、iostat等工具定位问题进程,通过block_dump参数查找占用IO最多的进程,以及如何检查进程读写文件的具体信息。

1、问题描述: 发现CGI程序的磁盘IO突然出现峰值上升;

2、判断: 程序突然出现大量的core dump或者某业务异常出发大量的IO写操作;

3、分析方法:

    a).使用top按照CPU排序发现CPU使用率很高的进程,一般IO使用率高的进程CPU的消耗也会大幅增加,通过CPU使用率基本能够定位到问题进程;

    b).通过iostat查看哪个分区有大量的写磁盘操作;

    c).通过block_dump参数查找占用IO最多的进程:

                /etc/init.d/sysylog stop 关闭syslog

                echo 1 > /proc/sys/vm/block_dump, 等待几秒钟后,内核会将IO信息输出到IO日志中;

                dmsg | egrep "READ|WRITE|dirtied" | awk '{print $2}' | sort | uniq -c | sort -rn | head 查找单位时间IO操作最高的进程的PID;

                 分析完成后关闭block_dump; echo 0 > /etc/init.d/vm/block_dump;   /etc/init.d/syslog start

4、查看进程读写的文件信息; 通过 /proc/$PID/fd 下的文件描述符来查看, 同时还可以通过这个方式查看服务器是否存在内存泄漏;

5、通过上述方法基本能够确认是由于哪个进程写哪个文件造成的磁盘IO消耗过高;

分别使用多线程,多进程IO多路复用实现一个简单的web server(端口80)承载附件的web。对比这三种实现方式各自的优缺点。 Ps:Web server和普通socket通信的区别主要在于:多了字段的解析和处理。 多线程:优点:线程间数据共享方便、线程切换开销小、可以充分利用多核处理器优势;缺点:线程间同步和互斥需要额外开销容易引起死锁、线程数量过多时系统资源开销、可能存在线程间的资源竞争 多进程:优点:进程间相互独立不会竞争资源、可以更好利用多核处理器、稳定性高;缺点:切换开销、系统资源消耗 IO多路复用:优点:单线程可同时处理多个IO请求,提高了并发性、节省系统资源、实现高效的事件驱动编程;缺点,计算密集型任务中IO多路复用效率可能较低、编程复杂性高 课题目的: 熟悉公司的开发设计流程 熟悉HTTP协议 熟悉并掌握Linux环境应用开发 熟悉socket网络编程 加强多线程/多进程编程能力 熟悉经典IO复用设计模型 熟悉Makefile的书写 课题要求: 1、撰写概要设计文档 2、实现以多线程方式实现web server功能(必修) 3、实现以多进程方式实现web server功能(必修) 4、实现以IO多路复用方式实现web server功能(必修) 5、提供完善Debug机制(必修) 6、Web server需完成get post等基础请求处理(必修) 7、请书写Makefile,使用make进行编译 8、如何使其具备高并发性并实现(选修) 请根据此写一份实验报告(核心代码部分留空)
最新发布
08-09
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值