polidog lab++

Blog

Macでネットの通信が遅い時にnetstatとlsofコマンド使って調べてみた

May 24, 2016 | tech | lsof netstat

特定のMacBookAirだけなぜか、ネットワークが遅いという現象が発生していたので調べてみた時の見聞録です。
(大したことはしてないです・・・)

ネットワークにつながらない

「なんかネットワークに繋がらなくなっちゃたんだよね」と言われたので調べてみました。
この時考えたのは「DNSの設定がおかしいんじゃね?」ぐらいに思っていました。

原因調査

なんとなくまずは確認手順を考えました。 - ループバックアドレスにPING - arpコマンドでイーサネット通信がただしく行われているか調べてみる - 外のサーバにipアドレスを指定してPING - 普通にドメイン名でPING

とりあえうこの段階調査しました。

ループバックアドレスにPING

ネットワーク・インタフェース周りがおかしいのかを調べるためにまずはループバックにping打ちました。
この段階では正常に帰ってきたので問題ない。

arpコマンドでイーサネット通信がただしく行われているか調べてみる

とりあえずarp -aとかやっとけば、他の機器確認できるわけだし、ここで正常だったらデータリンク層でも問題がないと特定できると思います。
結果他の機器は認識できていたので問題なかったようです。

外のサーバにipアドレスを指定してPING

普通に自分のサーバにping打ってた元気なリプライが帰ってきたので、ネットワークに特に問題ない。

普通にドメイン名でPING

普通にリプライ帰ってきたのでここでも問題ない。

ネットワークがつながらないわけじゃなかった

話を聞くとどうやらネットワークに繋がらないじゃなくて、ブラウザにレンダリングされるのが遅いとのことだった・・・。(それはネットに繋がらないといわないお。。。)
まあそんなことはいいとして、まず最初に疑ったことは2つ。

  1. ブラウザのプラグインが悪さをしているんじゃないか?
  2. もしかしてTCPのコネクションの問題?

ブラウザのプラグインが悪さをしているんじゃないか?

最初は疑ったものの、2つのブラウザで同じ現象が確認できてたのでそれはないという結論にしました。

もしかしてTCPのコネクションの問題?

とりあえずTCPのコネクション数どれぐらいかなぁーとか思い調べてみました。

$ netstat -p tcp | wc -l
273

270超えてるコネクション数だったので、ちょっとおかしいなぁーと思いました。
サーバだったらまだしも普通のPCでこのコネクション数はおかしいという。

おそらくTCPのコネクション数が多くなっているいろいろな通信が走っているのではないかという結論になりました。

netstatで使っているポートからプロセスを調べる

怪しそうなコネクションが大量にあったので、どのプロセスが使っているのか調べようと考えました。
今回はnetstatでLocal Addressのポートを調べて、lsofでどのプロセスか特定する形です。

$ netstat -p tcp
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  172.31.175.8.55563     104.244.42.193.https   ESTABLISHED

でここで55466というポートがわかったので、次にlsofを使って調べます。

$ lsof -i:55563                                                                                     
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
TweetDeck 908 polidog   15u  IPv4 0xd0f70d2759a43ac1      0t0  TCP 172.31.175.8:55563->104.244.42.193:https (ESTABLISHED)
TweetDeck 908 polidog   18u  IPv4 0xd0f70d2759a43ac1      0t0  TCP 172.31.175.8:55563->104.244.42.193:https (ESTABLISHED)

この例の場合はTweetDeckのプロセス代わり出せたわけですが、このように調査出来るわけです。

で、調査した結果avastの挙動がおかしくなって大量にコネクションを貼っていたみたいです。
ウイルスソフト怖いです><

まとめ

Macではnetstat -p tcpしてlsofでポート指定すれば、どのプロセスがどのポートを使っているか調べることできます。
ネットが遅いと思った時はこのような方法で調査してみるのはいかがでしょうか?

もっと良い方法がある場合は教えて下さいw

comments powered by Disqus

© 2017 polidog lab++