偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

線上問(wèn)題排查,一不小心踩到了一個(gè)Arthas的坑

開(kāi)發(fā) 后端
本篇分享下在排查過(guò)程中使用的一些比較實(shí)用的工具,包括tcpdump、arthas、simpleHTTPServer等。希望能對(duì)大家有所幫助。

[[349024]]

 最近幫新來(lái)的校招同學(xué)排查一個(gè)線上問(wèn)題,問(wèn)題本身不是很難,但是過(guò)程中踩到了一個(gè)arthas的坑,挺有意思的。

同時(shí),也分享下在排查過(guò)程中使用的一些比較實(shí)用的工具,包括tcpdump、arthas、simpleHTTPServer等。

希望能對(duì)大家有所幫助。

1.問(wèn)題描述
新開(kāi)發(fā)的一個(gè)功能,簡(jiǎn)單來(lái)說(shuō),就是讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)展示在前臺(tái)。

本地啟動(dòng)服務(wù)調(diào)試,用postman調(diào)用api,返回?cái)?shù)據(jù)顯示正常,數(shù)據(jù)中的中文也正常。

但是部署到線上環(huán)境后,通過(guò)chrome瀏覽器調(diào)用和postman調(diào)用接口,返回的非中文數(shù)據(jù)正常,但是中文顯示亂碼。

2.排查思路
這個(gè)問(wèn)題的第一反應(yīng)是請(qǐng)求的content-type有問(wèn)題。

不過(guò)在chrome瀏覽器中確認(rèn)了請(qǐng)求的request和response的content-type都是application/json;charset=UTF-8,沒(méi)有問(wèn)題。

然后又google了一番亂碼問(wèn)題,基本上都是說(shuō)的spring的HttpMessageConverter問(wèn)題或者content-type,都無(wú)法解決。

只能深入排查一番了。

排查的主要思路就是先確定亂碼是哪一步產(chǎn)生的。

一個(gè)就是數(shù)據(jù)庫(kù)里查出來(lái)地方,需要用抓個(gè)包確認(rèn)下,不過(guò)我們本地服務(wù)調(diào)用是正確的,那么這一步應(yīng)該沒(méi)有問(wèn)題。

一個(gè)是應(yīng)用服務(wù)返回的地方,需要用抓個(gè)包確認(rèn)下。在線上部署環(huán)境里,用tcpdump把對(duì)應(yīng)的應(yīng)用服務(wù)返回?cái)?shù)據(jù)時(shí)抓個(gè)包。

一個(gè)就是代碼邏輯中存在數(shù)據(jù)轉(zhuǎn)換,這個(gè)需要通過(guò)arthas看看線上應(yīng)用的運(yùn)行時(shí)數(shù)據(jù)情況。

3.用tcpdump抓包看服務(wù)端響應(yīng)
3.1 什么是tcpdump呢?
tcpdump是linux下的網(wǎng)絡(luò)數(shù)據(jù)包截獲分析工具。在linux的日常網(wǎng)絡(luò)管理中,tcpdump的使用頻率很高,熟練掌握對(duì)提高工作效率很有幫助。

3.2 報(bào)文抓取
為了獲取對(duì)應(yīng)服務(wù)的請(qǐng)求報(bào)文,需要登錄對(duì)應(yīng)的服務(wù)器(或者k8s的pod)使用tcpdump進(jìn)行抓取。

作為一個(gè)暖男,我把從安裝到使用都一步步記下來(lái)給你 :)

1)安裝工具

如果你的服務(wù)器上沒(méi)有安裝過(guò)tcpdump,可以先執(zhí)行以下命令安裝

  1. yum -y install net-tools 

2)查看網(wǎng)絡(luò)狀態(tài)

如果服務(wù)上有多個(gè)網(wǎng)卡,可以通過(guò)以下命令查看

  1. Netstat -i 

3)部署抓包

  1. tcpdump -i eth0 tcp -w xxx.cap 
  • en0表示監(jiān)聽(tīng)的網(wǎng)卡
  • tcp表示報(bào)文類型
  • -w 指定輸出文件名

還有很多其他選項(xiàng)可以過(guò)濾使用,大家可以網(wǎng)上搜一下,這里就不展開(kāi)了。

4)調(diào)用請(qǐng)求

部署了tcpdump后,對(duì)服務(wù)器發(fā)起api請(qǐng)求。這時(shí)候相關(guān)的tcp報(bào)文都會(huì)被輸出到 xxx.cap文件中了。

3.3 報(bào)文解析
1)把xxx.cap文件發(fā)送本地

一般可以使用scp命令,直接發(fā)送

  1. scp xxxx.cap admin@10.xxx.xxx.xxx:/path 

在傳輸服務(wù)器的文件到本地時(shí),如果scp不方便使用,比如一些防火墻限制。

也可以使用 python 在服務(wù)器上開(kāi)啟一個(gè) web 服務(wù)(端口可自定義)。

  1. python -m SimpleHTTPServer 18888 & 

然后在本地使用 wget 下載文件即可。

2)解析cap文件

本地得到cap文件后,可以通過(guò)wireshark軟件對(duì)cap文件進(jìn)行解析,得到如下結(jié)果。

對(duì)api的報(bào)文進(jìn)行解析后,發(fā)現(xiàn)返回對(duì)中文已經(jīng)是亂碼了,確認(rèn)了在服務(wù)端發(fā)出的響應(yīng)內(nèi)容中,已經(jīng)是亂碼了。

所以,只能繼續(xù)排查應(yīng)用本身的問(wèn)題。

4.用arthas排查線上運(yùn)行代碼
Arthas 是Alibaba開(kāi)源的Java診斷工具,當(dāng)你遇到以下類似問(wèn)題而束手無(wú)策時(shí),都可以嘗試使用Arthas(更詳細(xì)的用法參考官方文檔:https://arthas.aliyun.com/doc/quick-start.html):

  • 這個(gè)類從哪個(gè) jar 包加載的?為什么會(huì)報(bào)各種類相關(guān)的 Exception?
  • 遇到問(wèn)題無(wú)法在線上 debug,又不想頻繁加日志再重新發(fā)布
  • 線上遇到某個(gè)用戶的數(shù)據(jù)處理有問(wèn)題,但線上同樣無(wú)法 debug,線下無(wú)法重現(xiàn)!

4.1 快速安裝、啟動(dòng)

  1. curl -O https://arthas.aliyun.com/arthas-boot.jar 
  2.  
  3. java -jar arthas-boot.jar 

4.2 運(yùn)行代碼返回排查
本次排查,就使用了arthas的watch功能(更詳細(xì)的用法參考官方文檔:https://arthas.aliyun.com/doc/watch.html),能方便的觀察到指定方法的調(diào)用情況。能觀察到的范圍為:返回值、拋出異常、入?yún)ⅰ?/p>

我們先看看線上運(yùn)行應(yīng)用controller層對(duì)于請(qǐng)求的響應(yīng),無(wú)需添加日志重新部署,我們馬上就能看到線上代碼的返回結(jié)果。

  1. watch xxx.xxx.controller method "{params,returnObj}" -x 2 

然后發(fā)起api調(diào)用,在arthas中顯示結(jié)果如下:

我們可以看到,這個(gè)controller方法返回的內(nèi)容就是亂碼了。

因此,說(shuō)明是代碼邏輯中存在轉(zhuǎn)換的問(wèn)題了。

5.問(wèn)題定位
根據(jù)業(yè)務(wù)邏輯,基本能猜測(cè)是從業(yè)務(wù)中的 byte[] 轉(zhuǎn)string的時(shí)候出現(xiàn)問(wèn)題了。

找到對(duì)應(yīng)代碼如下,new string()時(shí)沒(méi)有指定字符集:

因此會(huì)在轉(zhuǎn)換過(guò)程中,默認(rèn)讀取系統(tǒng)變量的file.encoding作為字符集。

然后我們用arthas直接查看系統(tǒng)變量,果然不是utf8。

所以,解決方案有兩個(gè)。

第一種是在new string(bytes) 時(shí)指定字符集。

第二種就是設(shè)置系統(tǒng)變量file.encoding=utf-8。

 

5.進(jìn)一步踩坑
我們一開(kāi)始選擇了代碼修復(fù),在代碼中轉(zhuǎn)換時(shí)指定字符集。

重新發(fā)布后,再用arthas觀察一下,發(fā)現(xiàn)竟然還是亂碼???!

然后重新回頭在代碼中看了很久,一直找不到原因,陷入了僵局。。。

 

突然,隨手看了下線上,發(fā)現(xiàn)線上已經(jīng)顯示正常了,納尼?是arthas有問(wèn)題?

然后google了一下,發(fā)現(xiàn)很多人碰到arthas顯示中文亂碼的問(wèn)題。。。

解決方式也比較簡(jiǎn)單,啟動(dòng)arthas的時(shí)候,也指定一下字符集。

java -jar -Dfile.encoding=UTF-8 arthas-boot.jar

然后問(wèn)題解決了。。。呵呵。。。

這時(shí)候再觀察arthas的結(jié)果已經(jīng)顯示正常。

這說(shuō)明了什么??。。。?/p>

Arthas輸出界面的時(shí)候,肯定在字符串轉(zhuǎn)換的時(shí)候,也沒(méi)有指定字符集。。。。

一腳踩了個(gè)連環(huán)坑。。。

6.總結(jié)
其實(shí)整個(gè)問(wèn)題是比較粗淺的,就是最后這個(gè)arthas的中文亂碼讓人有點(diǎn)腦殼疼。

當(dāng)然,最主要還是簡(jiǎn)單分享下tcpdump、arthas、simpleHTTPServer這些小工具,希望能有所幫助吧。

 

責(zé)任編輯:姜華 來(lái)源: 阿丸筆記
相關(guān)推薦

2021-07-28 05:01:29

Lombok前端測(cè)試

2021-01-05 22:49:37

Python編程語(yǔ)言Java

2023-03-10 08:27:07

for循環(huán)項(xiàng)目線性結(jié)構(gòu)

2020-10-26 08:56:32

技術(shù)總監(jiān)程序員

2020-09-29 07:44:20

跨域前后端分離插件

2021-04-30 08:21:22

Linux管道設(shè)計(jì)

2018-01-18 22:26:30

2021-10-07 16:45:06

MySQL數(shù)據(jù)庫(kù)

2024-05-13 07:58:52

開(kāi)源項(xiàng)目PR

2021-01-30 09:50:54

MySQL密碼服務(wù)器

2019-09-19 20:47:29

刷臉支付人臉識(shí)別人工智能

2021-05-11 16:20:02

網(wǎng)站HTTPHTTPS

2025-03-05 00:27:00

2021-03-29 18:47:53

APP服務(wù)端通信安全數(shù)據(jù)安全

2020-04-30 09:45:41

安卓App小米

2022-09-27 18:19:32

Java數(shù)據(jù)結(jié)構(gòu)

2018-10-25 15:04:22

編程程序員陷阱

2021-01-08 09:36:23

程序員比特幣黑客

2022-04-27 07:21:06

HTTPAPI系統(tǒng)

2022-04-08 08:48:16

線上事故日志訂閱者
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)