掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
前面我們微構(gòu)網(wǎng)絡(luò)發(fā)布了《WordPress在部分windows服務(wù)器下變得很卡的原因淺析》的文章,里面提到WordPress(數(shù)據(jù)庫采用mysql)從一臺(tái)linux服務(wù)器遷移到另一臺(tái)windows服務(wù)器上后變得很卡,通過溯源調(diào)試發(fā)現(xiàn)是在使用mysqli_real_connect進(jìn)行數(shù)據(jù)庫鏈接是造成的卡。那么mysql數(shù)據(jù)庫host配置使用localhost和127.0.0.1進(jìn)行鏈接有什么差異呢。我們通過一組對(duì)比測試來進(jìn)行分享,測試代碼還是上一篇文章中提到的代碼,也就是采用mysqli_real_connect進(jìn)行數(shù)據(jù)庫服務(wù)器連接。代碼如下:
<?php $t1=microtime(true); $h=mysqli_init(); $r=mysqli_real_connect( $h, 'localhost', 'root', 'password', null, '3306' ); var_dump($r); $t2=microtime(true); var_dump($t2-$t1);
分別分為六組進(jìn)行測試,分別是linux(localhost)、linux(127.0.0.1)、linux(localhost,刪除hosts配置映射)、windows(localhost)、windows(127.0.0.1)、windows(localhost,刪除hosts配置映射)。
場景 | 消耗時(shí)長 |
linux(localhost) | 1.8ms |
linux(127.0.0.1) | 2.8ms |
linux(localhost,刪除hosts配置) | 1.8ms |
windows(localhost) | 20ms |
windows(127.0.0.1) | 30ms |
windows(localhost,刪除hosts配置) | 1025ms |
需要注意的是,每次計(jì)算得到的時(shí)間不完全一樣,在linux上基本上在幾毫秒內(nèi)(大多數(shù)是2ms左右),而在windows上每次測試時(shí)間浮動(dòng)較大,基本上是10-100ms之間(大多數(shù)在20-30ms之間)。但是在windows中,修改host刪除127.0.0.1 localhost配置后,所花的時(shí)間明顯增大。
因此,在linux中無論是使用localhost還是127.0.0.1 ,進(jìn)行數(shù)據(jù)庫連接所花費(fèi)的時(shí)間并沒有明顯的差別,在感官上是完全感受不到差別的。但在windows上,使用localhost連接,且host中沒有127.0.0.1 localhost時(shí),連接所需要時(shí)間占到整個(gè)請(qǐng)求的絕大部分時(shí)長,會(huì)非常明顯的感覺到卡。
比如如下圖是在本地服務(wù)器測試windows上使用localhost,且刪除hosts配置,網(wǎng)絡(luò)請(qǐng)求計(jì)時(shí)情況。而連接所需要的時(shí)間就需要1.025秒,其他的網(wǎng)絡(luò)開銷等時(shí)間僅僅占絕少數(shù)部分。
因此,當(dāng)項(xiàng)目遷移后請(qǐng)求響應(yīng)時(shí)間明顯比原來長,而且排除代碼邏輯錯(cuò)誤后,不妨考慮是否是由于localhost和127.0.0.1造成的差異問題。
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流