如何進行java系統優化

2021-07-08 20:58:38 字數 1965 閱讀 3232

上面這個核心字多點說也就是:更多使用者訪問、更短響應時間、資料正確性。 

優化的過程,我的想法就是先順藤摸瓜,沿著乙個請求發生的路徑一路看過去,測量一下每個點上消耗的時間,會發現很多消耗時間多的點,都是值得你去優化的地方。然後再考慮在每個點上發生了擁擠導致響應時間變長了又該怎麼解決。 

當然也不需要一上來就全面優化,連影響最小的地方也不放過。先優化對你的效能影響最大的地方,效果是最好的,解決主要矛盾才是關鍵。不同的情況下,會有不同的優化方式。 

簡單地來看乙個瀏覽器使用者訪問的流程: 

瀏覽器->伺服器->返回結果顯示 

這麼簡單地看,可能想得到的優化手段很少,常見的可能就是優化sql,加快資料庫處理;加個快取,加快返回;使用靜態檔案,減少動態計算。 

細分開來看每乙個步驟: 

2 瀏覽器真實發起請求伺服器時,首先被請求到的是伺服器的作業系統層,那麼伺服器的作業系統對外界連線的響應能力,就是你需要了解的東西了。比如linux的核心引數的調整如何影響最大連線數,簡單的乙個例子就是在乙個預設最大檔案控制代碼數只有1024的伺服器上,超過這個壓力的時候,你如何優化你的程式,也都沒有意義。入口只有那麼窄,你得把口給擴開。熟悉伺服器的效能,調優系統核心也是乙個必要的手段。 

3 系統層再把連線交給你的server做處理的時候,server的配置這個時候也相當重要。比如apache的最大連線數,tomcat的最大連線數。對server的配置調優很影響效能。比如tomcat在處理靜態檔案上的能力比apache要差很多,所以在apache+tomcat的負載均衡就能很好地進行動靜請求的分離,提高響應速度。又比如tomcat新版本裡的nio技術又比普通io效能好上不少。對server的了解,要保持跟蹤最新動態。 

4 server再把資料交給你的程式處理的時候,就到了考驗你程式設計能力的時候了。你得對你的程式的執行效率非常清楚。必須保證每個響應都在盡量短的時間內執行成功。還有比較常見的一些對不常更新的資料使用記憶體快取來加快訪問。記憶體永遠是最快的。這方面的優化也有非常非常多的事情可以去做,而且跟你的程式設計息息相關。 

5 程式處理的時候,資料庫連線池的使用,連線池大小的配置,連線池效能的優化,sql語句的優化,等等都可能影響你的程式的效率,這些地方永遠是值得關注的。當然,優秀的演算法在這個地方是少不了的。乙個好的業務邏輯設計,可能極大提公升你的程式效能。對資料庫操作的調優也是乙個永遠的話題。 

6 資料傳遞到資料庫進行儲存和查詢的時候,你就必須對你的資料庫的使用有所了解,知道資料庫本身的哪些配置可以優化從而帶來效能的提公升。乙個簡單的例子就是在記憶體足夠大的時候,增大mysql的記憶體快取就可以極大提公升它的響應速度。 

8 使用者下次訪問的時候,同樣面臨乙個優化的方式:是利用上次跟伺服器建立好的連線再次通訊呢?還是重現跟伺服器建立連線?這就是在server端做配置要考慮的乙個問題,在低併發下,保持跟使用者建立的socket連線,並且讓使用者通過這個連線來多次訪問,可以提高速度。但是在高併發下,大量這種建立好的連線就意味著其他使用者失去了進來的機會。所以這個是需要權衡的。一般情況下最好可以預估一下乙個使用者可能在多長的時間裡連續發起多少個請求,然後可以把使用者斷開,把資源用來服務其他使用者。 

9 ajax技術也是在減少大請求,使用更小的區域性資料更新來代替整個頁面的重新整理,加快使用者的響應速度,結合靜態化能完美改善效能。 

這是對乙個使用者的訪問的時候的考慮,然後就要考慮多使用者情況的問題(有些是上面提到過的): 

1 作業系統對多使用者訪問時的一些限制的優化 

2 server的併發量的優化 

4 對資料庫的鎖的機制必須深入了解,比如mysql不同引擎的帶來的鎖表和行級鎖對效能的影響。同時要在自己的邏輯處理上要控制好不同使用者同時操作的問題,時刻要繃緊這個弦。多資料集群,讀寫分離等等機制也是需要深入了解的。 

以上是我一些簡單的零碎總結,並不全面,也不細緻,主要想表達乙個思考的過程。不在於你都學會了什麼,發現問題,研究問題,解決問題的能力,才是最重要的。 

其實每乙個點上,基本上你都可以找到n多牛人寫的很牛很細緻的書來講具體怎麼優化的,需要的時候可以好好去找書來研究一下。

深入去了解每乙個點上的優化,你會發現,網際網路的魅力真的是奇妙無窮!

springboot如何進行優化

這一部分分為三個部分,啟動部分的優化,tomcat引數設定和記憶體調優 configuration enableautoconfiguration 用 bean 註解顯式配置,以便被 spring 掃瞄到 bean public messagecontroller messagecontroller...

如何進行mysql的優化

1 設計表的時候考慮選擇什麼樣的儲存引擎,myisam不之策事務,但查詢速度快,不過現在一般採用的都是inndb,能符合95 的專案需求。2 避免全表查詢的操作。3 在where 和 order by 的字段建立索引。但索引不是越多越好,會使insert 和update 的速度變慢。4 盡量不要採用...

sql命令如何進行優化

1 字段提取要按照 需多少 提多少 的原則,避免 select 盡量使用 select 欄位1,欄位2,欄位3 實踐證明,每少提取乙個字段,資料庫提取速度就會有相應的提公升。提公升的速度還要由你捨棄的字段大小來決定。2 盡量使用exists代替select count 來判斷是否存在記錄。優化器優化...