一直觉得那些能写博客或者知乎上能得到很多赞的人很了不起,他们不仅对于自己掌握的知识理解的很透彻,还能讲他们通俗易懂的解释给别人。我一直都不太擅于总结,感觉自己花了很多时间去学习,接触到的知识也不少,但是真正能为己所用,并且表述出来的很少。其实,只有你自己把你学到的表述出来了,你才是真正的掌握了它们。或许有时候是因为太忙,没时间,而忘记了总结。但是其实大部分时候还是因为太懒而放弃了总结。 最近工作中为一个系统的服务器更换而做了一些调优的设置。感觉解决问题的思路是这次收获最大的。因此尝试着进行了下总结: 首先,为何要做这次性能调优的工作。 之前我们的系统运行在tomcat+apache架构组成的6台服务器上。但是因为性能逐渐不足,加上之前的服务器是跟别的系统共用,已经没办法再扩展了。所以决定搬到一个全新构建的服务器集群下。加之公司规定,新构建的系统一概采用Nginx+Wildfly的架构,所以新环境里采用了Nginx+Wildfly的架构,而为了达到对硬件资源的有效利用,对它们分别进行了一些性能的调优。 关于性能调优的一个基本的思路,我的理解如下: 影响服务器性能的三个主要因素: CPU(计算能力)+IO(读写能力)+内存(存储能力) 测试达到最大性能时的瓶颈因素,然后找到原因,尝试修改中间件的设置或者系统代码去降低瓶颈值,以便让所有资源得到充分利用。 找到瓶颈很简单,但是找到原因就不太容易了,总结下到到目前为止遇到和处理过的问题,我给出一下几个建议: 如果系统逻辑很复杂,最好检查最耗费资源的处理是不是妥当(分析Thread dump) 如果对象是db服务器,需要查找最耗时的sql需不需要能够优化(分析Sql dump) 如果服务器资源还没达到最大利用率但是处理件数却已经达到极限,就需要看看中间件的设置是不是有问题(调整heap size、thread pool等设置)。 然后,分享下这次调优的过程: 测试工具:Jmeter 测试客户机:5台左右 服务器架构:web服务器1台(nginx),application服务器1台(wildfly) 服务器硬件:web服务器跟application服务器分别是2核cpu,4G内存,100G硬盘(无ssd) ①逐渐调整Jmeter件数,大概在每秒900/件的时候,错误开始频繁发生 ②通过log查找出错误的原因在Web服务器(Nginx) 错误内容: socket()
Month: January 2017
现在担当的一个ec网,前不久因为系统bug,出现了未给部分用户计算折扣的现象。因为用户的id输出到了日志中,后来就把这些id抽出来,通过跟另外一个master文件进行对比的方法来进行恢复工作。 插图 一般这种情况下,使用excel的vlookup函数都能够简单实现,但是因为母数据有30万件,直接粘贴到excel里面会导致系统死机,而这些数据因为都是个人情报,不能从没有数据库的商业环境里抽取出来,所以很是麻烦。 大家都束手无策的时候我当时提议拿java写个程序去查找。虽然现在看起来很傻,但是当时大家还是相当欣赏这个提议的。至少不需要人海战术去手动查了。 记得当时时候拿java写了这么个小程序: idFile = openFile(开存放id的文件) while(line = idFile读取一行){ masterFile = openFile(master文件) while(target = masterFile读取一行){ if(line == target) { 输出line break; } }