有一臺我操作的服務器。我用 Spring Boot 搭建了一個 Restful API 服務器,當我用 Postman 測驗我的 API 時,通常需要大約 20 到 50 毫秒的時間來回應。但有時最多需要 5.2 秒才能回應。
我想找出原因,所以我試圖檢查出現瓶頸的地方。當我通過在 InterceptorHandler 類中實作 PreHandle 和 PostHandle 來計算實際執行時間時,它以 5 毫秒結束。在java日志中,我可以在業務邏輯已經結束5秒后用Servelet日志查看200OK日志。
有什么方法可以檢查同時發生的情況?網路和記憶體 CPU 利用率都沒有奇點。還沒有用戶,因為它是一個測驗服務器。但是,該服務器上運行著大約三個 Spring Boot 應用程式。
我檢查了這些東西。
1004 pidstat 1
1005 uptime
1006 dmesg | tail
1008 vmstat 1
1011 mpstat -P ALL 1
1012 iostat -xz 1
1013 free -m
1014 sar -n DEV 1
1019 sar -n TCP,ETCP 1


uj5u.com熱心網友回復:
關于 Tomcat/Jetty 之間的性能差異。我可以建議您嘗試使用 MockMvc 進行集成測驗嗎查看入門
我知道在 OPS 基礎設施和 DEV 框架之間拆分測驗有多難,但是使用 SpringBoot,您可以通過單元測驗來測驗和顯示執行性能。
隨時在您的 API 上迭代呼叫,并在執行程序中添加一個 StopWatch。
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTest {
private final static Logger LOGGER = LoggerFactory.getLogger(ApplicationTest .class);
@Autowired
private MockMvc mockMvc;
@Test
public void shouldReturnDefaultMessage() throws Exception {
StopWatch stopWatch = new StopWatch("Testing REST API performances");
for(int i=1; i<=5; i< ) {
stopWatch.start("Test iteration " i);
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(content().string(containsString("Hello World")));
stopWatch.stop();
}
// Print the result
LOGGER.info(stopWatch.prettyPrint());
}
}
這個測驗應該揭示性能問題應該是其余控制器的初始化。
在本地,我在第一次通話時也有延遲。
秒表“測驗 REST API 性能”:運行時間(毫秒)= 806
00510ms 063 % 測驗迭代 1 00072ms 009 % 測驗迭代 2 00080ms 010 % 測驗迭代 3 00071ms 009 % 測驗迭代 4 00073ms 009 % 測驗迭代 5 如您所見,第一次呼叫需要很長時間。
希望我的回答能幫助您達到預期的性能并幫助您做出選擇。
uj5u.com熱心網友回復:
Transfert 時間是獲取回應的第一個位元組所需的時間。
根據這個定義,我傾向于說這是您的 API 進行處理的時間 --> 在 API 級別,某些請求可以解釋更長的處理時間嗎?演算法的復雜性,處理的資料數量不一樣......?
順便說一下,在第一次呼叫時,不要忘記創建了 servlet,因此第一個回應可能需要更多時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/342767.html
