今天在進行序列號壓測的時候,通過調用genSeqId方法來獲取序列號,100併發,16臺壓測機器,發現無論怎麼壓測,調用量達到140w左右的時候,此方法的ops直接掉到了0,具體圖示如下:
從上圖可以明顯看到,整個ops呈現斷崖式下跌。
當時左思右想,不得其解,後來註釋掉代碼中的System.out.println後,然後再進行壓測,發現恢復正常:
上圖可以看到,壓到了一億的量後,由於沒有發現問題,就停止了壓測。
後來翻閱了一下System.out.println源碼,發現其並不適合高併發下的打印工作 ,原因在於其內部用了大量的Synchronized來進行同步操作,這樣就導致兩個請求之間需要進行同步等待操作。