Quando o tempo de resposta de uma interface é muito longo, como localizar o problema e resolvê-lo?
1. Pegue o curl primeiro. Rede do navegador -> copiar como curl Se for um aplicativo, capture o pacote e copie-o.
curl -H 'Host: xxxxxx.com' -H 'Cookie: uid = CgoUFF / J3UVXIkMEB0 // Ag ==' -H 'apptype: 3' -H 'user-agent: ling zhi wen zhen ce shi / 2.1.2 (iPhone; iOS 14.0; Scale / 2.00) storeid '-H': '-H' deviceuuid: 6E47AC24-5477-4CB3-9E97-F0689776DFBA '-H' accountid: 1293541453032587288 '-H' appversion: 2.1.2 '-H 'cliente: ios' -H 'versão: 2.1.2' -H 'tipo de usuário: GROUPUSER' -H 'sinal: 89BEE7049DF61EFFFBA226AE076023F9 token' -H ': 9a2123abccbee8fcee1d0265a4bb3d44' -H 'carimbo de data / hora: 1677614' aceitar idioma: 1677614 ' ; q = 1 '-H' aceitar: * / * '-H' content-type: application / json; charset = utf-8 '-H' appver: 3 '--data-binary' {"token": " 9a2123abccbee8fcee1d0265a4bb3d44 "," organSign ":"ZHL0009529 "," activityType ": 1} '--compressed' https://xxxxx.com/patient/rights/verify '
2. Transformação do caracol. Adicione antes de curl e -H:
"\ ntime_namelookup:"% {time_namelookup} "\ ntime_connect:"% {time_connect} "\ ntime_appconnect:"% {time_appconnect} "\ ntime_pretransfer:"% {time_pretransfer} "\ ntime_starttransfer:"% {time_starttransfer} % {time_redirect} "\ ntime_total:"% {time_total} "\ n"
3. O curl modificado é o seguinte:
curl -w "\ ntime_namelookup:"% {time_namelookup} "\ ntime_connect:"% {time_connect} "\ ntime_appconnect:"% {time_appconnect} "\ ntime_pretransfer:"% {time_pretransfer} "\ ntime_starttransfer:"% {time_starttransfer} \ ntime_redirect: "% {time_redirect}" \ ntime_total: "% {time_total}" \ n "-H 'Host: xxx.com' -H 'Cookie: uid = CgoUFF / J3UVXIkMEB0 // Ag ==' -H 'apptype: Agente do usuário 3 '-H': ling zhi wen zhen ce shi / 2.1.2 (iPhone; iOS 14.0; Escala / 2,00) '-H' storeid: '-H' deviceuuid: 6E47AC24-5477-4CB3-9E97-F0689776DFBA '-H' accountid: 1293541453032587288 '-H' appversion: 2.1.2 '-H' client: ios '-H' version: 2.1.2 '-H' usertype: GROUPUSER '-H' sign: 89BEE7049DF61EFFFBA226AE076023F9 '-H' símbolo:9a2123abccbee8fcee1d0265a4bb3d44 '-H' timestamp: 1608776144395 '-H' accept-language: en; q = 1 '-H' accept: * / * '-H' content-type: application / json; charset = utf-8 '-H 'appver: 3' --data-binary '{"token": "9a2123abccbee8fcee1d0265a4bb3d44", "organSign": "ZHL0009529", "activityType": 1}' --compressed 'https://xxxxxx.com/patient/rights /verificar'com / paciente / direitos / verificar 'com / paciente / direitos / verificar '
4. Execute curl. Os resultados são os seguintes:
time_namelookup: 0,253
time_connect: 0,257
time_appconnect: 0,361
time_pretransfer: 0,361
time_starttransfer: 5,618
time_redirect: 0,000
time_total: 5,618
5. Os significados relevantes são os seguintes:
parâmetro |
significado |
|
time_namelookup |
Tempo de resolução de nome de domínio de DNS |
|
time_connect |
Tempo de conexão TCP, tempo de handshake de três vias |
|
time_starttransfer |
O tempo desde o início da solicitação até o primeiro byte ser transmitido |
|
time_total |
tempo total |
|
speed_download |
Velocidade de download, unidade-bytes por segundo |
|
time_appconnect |
SSL | SSH e outro tempo de estabelecimento de conexão de camada superior |
|
time_pretransfer |
O tempo desde o início da solicitação até o início da transmissão da resposta |
|
time_redirect |
O tempo desde o início até a última transação de solicitação |
6. Se o tempo for principalmente time_starttransfer menos o valor de time_pretransfer. Isso significa que o motivo da solicitação lenta está na parte de execução do código de negócios do servidor.
7. O código de negócios é demorado e é localizado rapidamente. Use arthas para solucionar problemas.
8. Inicie o arthas.
java -jar arthas-boot.jar
9. Selecione o processo Java. Digite o número de série.
10. Nome completo da classe de execução + nome do método
trace com.xxxx.service.impl.xxxxServiceImpl xxxMethod
11. Visualize chamadas demoradas.