Chinaunix

标题: linux环境下write怪现象(写入500M耗时20S) [打印本页]

作者: cp3alai    时间: 2016-05-11 19:38
标题: linux环境下write怪现象(写入500M耗时20S)
本帖最后由 cp3alai 于 2016-05-11 19:40 编辑

今天遇到了一个怪现象,因为我最后没有排查到原因,只能尽力描述,希望遇到类似情况的大牛们提供一个思路.
我所作的是一个频繁文件写入的系统,之前都好好的,但是今天突然各种丢包,最后定位到,系统调用write的时候,仅仅写入500M,竟然会卡住10s ~ 20s.
我的环境是CentOS6.5, 文件系统是xfs, 3个2T盘做的raid0,通过dd测试,磁盘写入性能可以达到380M/s .
就像问下各位大神,有没有遇到过类似情况的,你们是怎么处理的?
谢谢!!!
也希望即使没有遇到过类似问题的同学,也能过来发表一下自己的见解,不胜感激.
作者: MMMIX    时间: 2016-05-11 21:38
回复 1# cp3alai


    你是怎么写的?

曾经碰到一个问题,程序一旦打开log,就变得剧慢无比,最后发现是写log的时候频繁 flush,导致系统调用不但量大增多了,而且耗时也增加了。
作者: cp3alai    时间: 2016-05-12 10:27
我自己弄了两个500M的缓冲区,有数据的时候就往其中一个放,放满以后就调用write去同步文件,没有什么特别的地方,然后write就会卡顿20s左右,无论是xfs还是ext4都试过了,都会有这个问题.回复 2# MMMIX


   
作者: MMMIX    时间: 2016-05-12 22:43
回复 3# cp3alai


    用 dd 测试一下存储写入速度呢?
作者: cp3alai    时间: 2016-05-13 16:05
测过的,写入速度384M/s,单独写了一個测试程序:往文件里面写500M,仅用0.4s.回复 4# MMMIX


   
作者: MMMIX    时间: 2016-05-13 18:09
回复 5# cp3alai


    那估计就只能跟下程序看看是为什么停住了。
作者: lolizeppelin    时间: 2016-05-13 18:12
本帖最后由 lolizeppelin 于 2016-05-13 18:15 编辑

上代码  打log

500M是什么样子的500M

一次性写入500M 还是一次写一写很多个文件加起来500M

有没有并发写
作者: cp3alai    时间: 2016-05-23 12:13
我试着单步调试过,一次写500M程序很配合的就停在了write这里20s左右,着实怪异.
MMMIX 发表于 2016-05-13 18:09
回复 5# cp3alai

作者: cp3alai    时间: 2016-05-23 12:25
我单步调试过的,程序就是卡在write调用这里.的确存在并发写的情况.三个写文件线程,线程A,一次写入500M,线程B,C一次写入300M,磁盘IO 300M/S, 即使是这三个线程同时并发执行写操作,这个现象也太过怪异.没有理由write会卡顿20S左右的时间.
lolizeppelin 发表于 2016-05-13 18:12
上代码  打log

500M是什么样子的500M

作者: MMMIX    时间: 2016-05-23 14:30
cp3alai 发表于 2016-05-23 12:25
我单步调试过的,程序就是卡在write调用这里.的确存在并发写的情况.三个写文件线程,线程A,一次写入500M,线程 ...


涉及并发就不好说了。如果可以的话,最好是先把并发停掉/去掉,然后再看看,估计就正常了。
作者: cp3alai    时间: 2016-05-23 14:39
你说的对,我当时从理论上分析,即便同时并发也不会有问题,所以就没有试试.但是其实还是应该停掉别的线程试一试的.
MMMIX 发表于 2016-05-23 14:30
涉及并发就不好说了。如果可以的话,最好是先把并发停掉/去掉,然后再看看,估计就正常了。

作者: liuxuejin    时间: 2016-05-25 13:59
可以用systemtap看看
作者: cp3alai    时间: 2016-05-25 16:15
谢谢,我找时间复现一下.现场环境,不容易找机会...
liuxuejin 发表于 2016-05-25 13:59
可以用systemtap看看

作者: lolizeppelin    时间: 2016-05-26 18:02
本帖最后由 lolizeppelin 于 2016-05-26 18:09 编辑

不要多线程并发写

专门弄个写入的线程

python的进程里有全局锁,多线程只能单核心,各个线程间切换回不停的调用这个东西

写入问题可能是频繁切换导致中断太多

你starace追踪一下看看
作者: liuxuejin    时间: 2016-05-29 23:48
回复 13# cp3alai


    尤其是有ext4的jdb2日志系统。及其容易写延迟。你可以试试关闭。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2