什么,ES又慢了?虽然不咋会,但我能解决!
上次查了一下ES查询慢的问题,文章列表的性能问题解决了,但是部分文章详情查看还是慢,大致在10S左右。虽然不咋会,但是做为技术人的倔强是,不解决不好意思见人。于是又查了一下,排查思路对大家查其他问题应该有参考意义。
第一步 看网络请求
打开F12,看一下网络情况。

TTFB全称是Time To First Byte,表明发出页面请求到接收到应答数据第一个字节所花费的毫秒数。
也就是服务端就处理了7秒,下载花了373毫秒。这7秒在干啥呢,根据上次看代码的情况,大致率还是在ES查询这块。
第二步 验证ES通过ID取文章性能
通过elasticsearch head插件直接调用es的http接口,es查询就花了200毫秒左右,有5秒钟时间是在下载文章。由于我本地和ES服务器不在一个网段,验证结果不能说明缘由。
会不会是应用服务器和ES服务器之间的网络有问题?为了验证两台服务器的网络情况,于是在两台服务器之间使用iperf命令进行测速。
•应用服务器
iperf3 -s //启动iperf3服务
———————————————————–
Server listening on 5201
———————————————————–
•es服务器
iperf3 -c [应用服务器IP] -t 10 //启动iperf3服务
通过iperf3验证,两台服务器之间的网速可以到100MB。前面已经定位出ES查询这篇文章只花了200毫秒,两台服务器之间的网络又是100MB,那为啥要下载这么久呢??
难道说iperf3测速不准,又或者是es自己有限速功能?为了验证是不是es有限速,就通过浏览器F12的网络页签,拷贝es接口的curl命令,到服务器上去执行
curl -o /dev/null 'http://ip:9200//adc/content/doc_id' -H 'Connection: keep-alive' -H 'Authorization:
Basic XXXX==' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'DNT: 1'
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50' -H 'Content–Type: application/json' -H
'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' -H Accept–Encoding:gzip,defalte
–compressed –insecure
其中在ES服务器上执行这条命令,速度能到10MB,而如果在应用服务器上执行,速度只能在400KB-2MB之间,慢的时候只有400KB,如果这篇文章是4MB,那应用服务器获取这篇文章时,光下载就得花10秒钟。
为什么ES返回速率这么慢
问题已经缩小到从ES服务器往应用服务器传输数据慢呢,为什么呢?有点想不清楚,iperf3测速也有100MB,但是二者的最大下载速度还不到2MB,通过更多华宇人使用的TMAC监控看,两台服务器的网络都很闲,难道说服务器也学会摸鱼了?
在我百思不得解时,我跑到成研技术群里咨询其他同事。
家友说ES好像有限速,这个我查过了官网和es的配置文件,没发现有限速相关的配置。谭老师提出用scp验证一下文件拷贝速度,这个思路不错,如果scp拷贝速度也只有2MB,那就说明和ES无关,如果scp拷贝速度能到100MB左右,说明和ES有关系。于是就在两台服务器之间做了一下scp,从es服务器上scp一个大文件到应用服务器。
验证发现scp也只有1.5MB,和es接口调用速度一样,说明和es没啥关系,这两台服务器之间有问题。网络问题的确 不太擅长,于是找到服务服务器的同事咨询。结果发现
•从es服务器往应用服务器scp速度只有1.5MB•从应用服务器往es服务器scp能到80MB,基本把网络跑满
这两台服务器实则都是虚拟机,查了一阵没查出具体缘由,于是把es服务器换到另一台宿主机上,再scp一试,速度能到96MB

系统速度一下提升40倍。
当看到系统从一直卡着转圈到秒出,心里还是很爽的,这大致就是程序员的快乐吧。
结论
•iperf测速不必定准,可以scp啥的实际测一下•查问题要不断深入,各个击破•虚拟机环境下,ethtool显示不了网卡具体参数






换了宿主机就好了,也还是没找到问题呀
嗯,这个超过我的知识范围了,后面再找管服务器的同事了解一下进展