操作系統及軟件
2.2.1. 版本
不同的操作系統在內核實現上可能各不相同,因而對運行在上面的應用程序來說可能影響比較大。
筆者并沒有做過分析不同操作系統對服務器性能的影響,因為只用過Linux開發服務器程序。Linux操作系統在這十幾年發展的異常迅猛,目前大部分的服務器都是運行在Linux操作系統上的。Linux目前具有最好的生態系統,服務器端的各種軟件都為它而設計,默認都認為你是在 Linux 上跑,你要是整一個非 Linux 的服務器,你得有足夠的心理準備,因為出現任何問題,你可能未必能找到能幫你解決問題的人。
2.2.2. 參數配置
先說一個小故事。福特公司一套重要設備出現故障,找了很多人來維修,結果都沒有維修好,沒辦法了,就在購買設備的英國公司高價聘請一位工程師過來維修,工程師來到之后,反復查找原因,最后在一個小零件上劃了一條線,然后對旁邊福特公司的人說,在劃線的地方切掉就好了,果不其然,切掉之后故障真的解除了,按照合約,福特公司應支付公司一萬美元,周圍的人都唏噓不已,感嘆一條線就可以價值一萬美元,工程師回答到:那條線只值一美元,而怎樣找到那條線值9999美元。
我們在測試服務器的過程中,經常會遇到性能上不去。查看CPU,網絡,IO消耗都挺低的,就是定位不到問題的原因。有經驗的程序員可能會告訴你你把某個參數修改一下,立馬性能噌噌噌上去了。比如mysql相關設置,系統文件描述符,緩沖區大小,time_wait快速回收設置等,甚至是線程池配置的線程個數也會對服務器的性能產生較大的影響。
關于數據庫參數的設置,比如mysql的配置文件my.cnf文件中,修改不同的配置(比如innodb_flush_log_at_trx_commit 設置為0,1還是2 )可能會對數據庫的讀寫性能影響很大。
2.2.3. 應用程序本身實現
比如程序中需要頻繁申請內存,使用bzero和memset對服務器性能影響差距可能會很大。
另外程序中的一些查詢操作,采用不同的數據結構,可以實現時間和空間上的相互轉化,從而影響服務器的性能。
Linux下的數據監控工具