今天下午發覺有個簡單的操作竟然有時候要花一秒鐘, 做了許多交叉比對, 發覺以下驚人的跡象:
- 同一份程式、同一份資料庫, 連用 apache 跑的服務時, 有時要花一秒; 但連 django development server 時卻是瞬殺。
- log 顯示, 不管連那種 web server, 我的程式都只花不到 0.05s。
- 用 Chrome Developer Tool 的 Resource 觀看, 慢的時候, 大部份時間是 waiting。
- 用 VNC 連到 server, 再從本機連 apache, 也是瞬殺。
- 從我的電腦或同事的電腦連 apache 都是有時會延遲, 我的情況比較頻繁。
- 同樣的連結點第二次時會變快, 但過一陣子再點似乎又會變慢。
- 我主要是測 AJAX + GET。
綜合以上線索, 我下了一個很腦殘的推論: apache 有鬼!! 不知是 apache 讀檔案還是做些奇怪的事, 或是 mod_wsgi 做奇怪的事, 造成延遲。也許 apache 有奇妙的 cache, 造成同一連結點第二次時會變快。
和來和同事 R 討論後, 他問了一個問題: 「該不會是是資安軟體阻擋吧?」 (*1) 於是同事 P 在 server 隨便開個奇怪的 port, 將該 port 的封包轉到本機的 port 80。我再試的結果, 速度就變正常了!!
事後回顧發覺自己的推論太腦殘了, apache + 80 和 django development server + some port, 我卻忽略了 port 的事, 只看到 web server 的差異。差點要去找 apache 或 mod_wsgi profiling 的方法, 幸好有先和同事閒聊, 省了一堆工, 也放下心裡一塊大石頭。
註 *1: 資安軟體會攔截對外連的 URL, 阻止連某些網站。沒想到連對內也有攔截.....。
沒有留言:
張貼留言