有哪些好点的单页网站wordpress重置主题设置
有哪些好点的单页网站,wordpress重置主题设置,做ppt比较好的网站,wordpress 图片水印文章目录引言详解Linux系统IO性能问题排查通用步骤1. 检查服务器负载2. 查看IO使用率3. 明确定位IO进程其他有用的IO分析工具小结参考引言
在监控工具盛行的今天#xff0c;学会传统的系统性能瓶颈排查手段也是必要的技术储备#xff0c;它可以让你保持对系统指标的敏感度学会传统的系统性能瓶颈排查手段也是必要的技术储备它可以让你保持对系统指标的敏感度而以下便是笔者整理的一套比较普适的IO性能瓶颈通用排查方法论同时为了更好地复现这个问题笔者也用Java写了一个多线程执行数据读写的程序读者可以查看如下代码结合注释了解一下这个逻辑/** * 启动磁盘I/O操作以模拟高I/O负载 * 通过创建多个I/O任务线程来模拟高磁盘I/O负载 */privatestaticvoidstartDiskIOOperations(){log.info(开始高I/O磁盘操作...);log.info(在另一个终端中运行 iostat -x 1 来监控磁盘利用率。);// 创建固定线程数的线程池executorExecutors.newFixedThreadPool(NUM_THREADS);// 提交多个任务以连续写入磁盘for(inti0;iNUM_THREADS;i){executor.submit(newIOTask(i));}log.info(磁盘I/O操作已启动使用 {} 个线程,NUM_THREADS);}/** * 执行连续写入操作以模拟高I/O的任务 * 该类负责执行磁盘I/O操作通过不断写入和清空文件来模拟高I/O负载 */staticclassIOTaskimplementsRunnable{privatefinalinttaskId;publicIOTask(inttaskId){this.taskIdtaskId;}Overridepublicvoidrun(){// 每个线程写入自己的临时文件Stringfilename/tmp/disk_io_test_taskId.tmp;try(FileOutputStreamfosnewFileOutputStream(filename)){log.info(线程-{} 正在写入 {},taskId,filename);// 连续将数据写入文件并在每次写入后清空文件while(!Thread.currentThread().isInterrupted()){performDiskIOOperation(fos,taskId);ThreadUtil.sleep(500);}}catch(IOExceptione){log.error(线程-{} 发生错误: {},taskId,e.getMessage());}}}/** * 执行磁盘I/O操作写入指定大小的数据然后清空文件 * 该方法会连续写入数据到文件然后清空文件内容用于模拟高I/O负载 * param fos 文件输出流 * param taskId 任务ID * throws IOException IO异常 */privatestaticvoidperformDiskIOOperation(FileOutputStreamfos,inttaskId)throwsIOException{longstartTimeSystem.currentTimeMillis();// 写入数据分块写入longbytesWritten0;while(bytesWrittenWRITE_SIZE){fos.write(DATA);bytesWrittenDATA.length;}fos.flush();// 强制写入磁盘// 清空文件内容fos.getChannel().truncate(0);longendTimeSystem.currentTimeMillis();// 打印本次操作的耗时log.info(线程-{} 完成一次写入和清空操作耗时: {} ms,taskId,(endTime-startTime));}我是SharkChiliJava 开发者Java Guide开源项目维护者。欢迎关注我的公众号写代码的SharkChili也欢迎您了解我的开源项目 mini-redishttps://github.com/shark-ctrl/mini-redis。为方便与读者交流现已创建读者群。关注下方公众号获取我的联系方式添加时备注加群即可加入。我是SharkChiliJava开发者Java Guide 开源项目维护者。欢迎关注我的公众号写代码的SharkChili也欢迎您了解我的开源项目 mini-redishttps://github.com/shark-ctrl/mini-redis。为方便与读者交流现已创建读者群。关注上方公众号获取我的联系方式添加时备注加群即可加入。详解Linux系统IO性能问题排查通用步骤1. 检查服务器负载当我们认为存在IO瓶颈时首先要做的就是基于top指令查看当前服务器wa即CPU等待IO任务完成的占比一般情况下20%以下算是一个比较合理的正常阈值超过30%-40%则表明系统可能存在严重的IO瓶颈。以笔者的服务器为例可以看到wa的值远大于正常范围说明当前CPU基本处于等待IO任务完成的情况Tasks:34total,1running,33sleeping,0stopped,0zombie %Cpu0:0.5us,2.6sy,0.0ni,5.3id,90.5wa,0.0hi,1.1si,0.0st %Cpu1:0.0us,2.2sy,0.0ni,24.9id,72.4wa,0.0hi,0.5si,0.0st %Cpu2:1.1us,0.6sy,0.0ni,0.6id,97.7wa,0.0hi,0.0si,0.0st %Cpu3:0.5us,2.7sy,0.0ni,16.8id,80.0wa,0.0hi,0.0si,0.0st %Cpu4:0.6us,1.7sy,0.0ni,0.0id,97.8wa,0.0hi,0.0si,0.0st %Cpu5:0.0us,3.9sy,0.0ni,18.8id,77.3wa,0.0hi,0.0si,0.0st2. 查看IO使用率明确系统存在IO性能瓶颈的情况下我们就需要更进一步定位问题以笔者为例一般会执行iostat指令如下所示大意为-x显示更多扩展信息包括设备利用率、等待时间等每1秒输出1次持续输出iostat -x1从输出结果来看对应sdd盘使用率%utilIO利用率飙到100%且iowait达到了78.2%很明显这块磁盘存在一些异常IO读写任务avg-cpu: %user %nice %system %iowait %steal %idle0.0%0.0%1.0%78.2%0.0%20.8% Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f_await aqu-sz %util sda0.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00sdb0.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00sdc0.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00sdd4.000.040.000.00122.2510.24171.00190.811.000.583884.171.120.000.000.000.000.000.000.00664.68100.00关键指标解读%util设备利用率接近100%表示设备繁忙可能存在IO瓶颈r_await和w_await平均读写请求等待时间数值越高说明IO响应越慢aqu-sz平均请求队列大小数值较大说明IO请求堆积严重await平均服务时间读写等待时间之和3. 明确定位IO进程基于上述过程我们已经明确sdd盘存在IO异常此时我们就可以通过iotop来查看具体进程了需要补充的是iotop默认是没有安装的读者可以参考网上教程自行安装以笔者的Ubuntu系统为例对应的安装指令为sudoaptinstalliotop最后键入sudo iotop -o查看正在执行IO操作的进程对应输出结果如下对应字段含义分别是Total DISK READ: 总磁盘读Total DISK WRITE: 总磁盘写Current DISK READ: 瞬时磁盘读Current DISK WRITE: 瞬时磁盘写TID线程号PRIOio进程优先级USER进程所属用户DISK READ该线程读取速率DISK WRITE该线程写入速率COMMAND执行线程的命令(对应java进程启动指令)此时就可以非常明确地看到笔者Java进程对应执行异常IO操作的线程和读写速率了可以看到笔者的大量进程都存在写入操作占用大量磁盘写入带宽Total DISK READ:0.00B/s|Total DISK WRITE:142.99M/s Current DISK READ:11.92K/s|Current DISK WRITE:336.21M/s TID PRIOUSERDISK READ DISK WRITECOMMAND3253712be/4 sharkchi0.00B/s18.26M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-3]3253713be/4 sharkchi0.00B/s18.26M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-4]3253711be/4 sharkchi0.00B/s18.25M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-2]3253715be/4 sharkchi0.00B/s18.25M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-6]3253714be/4 sharkchi0.00B/s18.24M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-5]3253710be/4 sharkchi0.00B/s17.50M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-1]3253717be/4 sharkchi0.00B/s17.50M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-8]3253716be/4 sharkchi0.00B/s16.74M/s java -jar web-cache-1.0.jar --app.startup.method1[pool-2-thread-7]其他有用的IO分析工具在实际排查中除了上述工具外还有其他一些有用的工具可以辅助分析pidstat -d 1显示每个进程的IO统计信息iotop -a按IO累计使用量排序vmstat 1显示虚拟内存统计包括IO相关指标lsof D /path/to/directory列出打开指定目录下文件的进程小结我们来简单小结一下IO性能瓶颈的排查套路通过top命令查看%waiowait指标判断CPU是否存在异常等待IO的情况使用iostat -x 1查看IO使用率和响应时间等详细指标定位具体磁盘设备使用iotop显示正在执行IO任务的进程和线程明确问题程序结合其他工具如pidstat、vmstat等进行深入分析当然对于老司机而言可能大部分都会在top指令完成后明确存在io性能瓶颈且当前服务器是java进程专用后就会直接通过iotop定位问题了而这就是所谓的经验。我是SharkChiliJava 开发者Java Guide开源项目维护者。欢迎关注我的公众号写代码的SharkChili也欢迎您了解我的开源项目 mini-redishttps://github.com/shark-ctrl/mini-redis。为方便与读者交流现已创建读者群。关注下方公众号获取我的联系方式添加时备注加群即可加入。我是 SharkChili Java 开发者Java Guide 开源项目维护者。欢迎关注我的公众号写代码的SharkChili也欢迎您了解我的开源项目 mini-redishttps://github.com/shark-ctrl/mini-redis。为方便与读者交流现已创建读者群。关注上方公众号获取我的联系方式添加时备注加群即可加入。参考【双语视界】Linux上IO性能问题的故障排除:https://www.bilibili.com/video/BV14d35zhEjs/?from_spmidunited.player-video-detail.drama-float.0plat_id411share_fromseasonshare_mediumiphoneshare_platiosshare_session_id2A52FF3A-393E-4D48-98A0-712F961E6C3Ashare_sourceWEIXINshare_tags_ispmidunited.player-video-detail.0.0timestamp1758040810unique_kgAzBCJYvd_sourcebf04f9a485aa892c0242fbfdfca25589