タイトルはすべてを言います。とにかく、サーバーを14.04 LTSから16.04 LTSにアップグレードしたところ、Sudoの実行が14.04よりも非常に遅いことがわかりました。
私は追跡し、次の結果を得ました:
$ Sudo strace Sudo true
- - - - - - - - - - - - - - をちょきちょきと切る - - - - - - - - --------------- ... socket(PF_INET、SOCK_STREAM、IPPROTO_TCP)= 9 bind( 9、{sa_family = AF_INET、sin_port = htons(722)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(723)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています) bind(9、{sa_family = AF_INET、sin_port = htons (724)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(725)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(726)、sin_addr = inet_addr( "0.0 .0.0 ")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(727)、sin_addr = inet_addr(" 0.0.0.0 ")} 、16)= -1 EADDRINUSE(アドレスはすでに使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(728)、 sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(729)、sin_addr = inet_addr( " 0.0.0.0 ")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(730)、sin_addr = inet_addr(" 0.0.0.0 ") }、16)= -1 EADDRINUSE(アドレスはすでに使用中) bind(9、{sa_family = AF_INET、sin_port = htons(731)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(すでに使用されているアドレス) bind(9、{sa_family = AF_INET、sin_port = htons(732)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレス既に使用中) bind(9、{sa_family = AF_INET、sin_port = htons(733)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用中) bind(9、{sa_family = AF_INET、sin_port = htons(734)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用中) bind (9、{sa_family = AF_INET、sin_port = htons(735)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用中) bind(9、{sa_family = AF_INET、sin_port = htons(736)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用中) bind(9、{sa_family = AF_INET、sin_port = htons(737)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(既に使用されているアドレス) bind( 9、{sa_family = AF_INET、sin_port = htons(738)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用されています) bind(9、{sa_family = AF_INET、sin_port = htons(739)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています) ... - - - - - - - - - - - - - - をちょきちょきと切る - - - - - - - - - - -----------
Sudoコマンド自体は成功しましたが、5秒などの非常に長い時間がかかりました。
ポート範囲は512〜1023で、スーパーユーザー特権を持っていることを保証するなどの目的で特権ポートをバインドしようとしているようです。
そして、須藤が成功した後、netstat -an
ショー:
- - - - - - - - - - - - - - をちょきちょきと切る - - - - - - - - --------------- ... tcp 0 0 192.168.0.10:959 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:910 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:932 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:34470 192.168。 0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:966 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:903 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:875 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:45452 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:970 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:907 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:41063 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:45659 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:948 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:50370 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:56145 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:929 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10 :909 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:33648 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:33556 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:55209 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:975 192.168.0.1:617 TIME_WAIT tcp 0 0 192.168.0.10:969 192.168.0.1 :617 TIME_WAIT tcp 0 0 192.168.0.10:35903 192.168.0.1:111 TIME_WAIT tcp 0 0 192.168.0.10:888 192.168.0.1:617 TIME_WAIT ... -------------------------- - をちょきちょきと切る - - - - - - - - - - - - - - - -
ここで、192.168.0.10は私のサーバーで、192.168.0.1はNISサーバーです。
サーバー上のypbind
を停止してSudo
を実行すると、サーバーとNISサーバー間で無駄なbind(2)とTIME_WAITが観察されなくなります。
ypbind
を止めることができず、古いアジャイルSudo
の速度を非常に悪い状態に戻したいB)
私に何ができる?
ありがとうございました
いくつかのシステムを16.04 LTSにアップグレードした後、同じ動作に遭遇しました。 NISとの互換モードを使用して、/ etc/passwdの+ @ netgroupと+ userを介して、より大きなNISドメインからシステムにアクセスできるユーザーを選択します。
私の同僚-すべてのクレジットを取得する必要がありますが、StackExchangeのことはしていません-互換モードを維持し、/ etc/passwdで+ @ netgroupと+ userを使用できるようにする回避策を見つけました。 passwdとshadowの互換モードを終了しますが、/ etc/nsswitch.confのグループに「files nis」を使用します。
passwd: compat
shadow: compat
group: files nis
/ etc/groupの「compat」モードは、NISグループマップ全体を含めたい場合に「files nis」と同等です。
これがあなたの状況に合うかどうか聞いてみたいと思います。
NISグループとユーザーを使用して同じ問題が発生しました。各ユーザー認証は非常に遅くなります。クライアントとNISサーバー間のトラフィックをtcpdumpすることもできます。この場合、2つの間で1分間程度の異常なパケットストームが発生するのを確認できます。
私は設定をいじりに行って、設定を変更するというアイデアを思いつきました。それにより、auth、login、Sudoの動作が完全に変更されました。/etc/passwd、/ etc/shadow、/ etc/group、およびnsswitch.confファイルから「+ ::::」を削除して、次の行を変更します。
passwd: files nis
group: files nis
shadow: files nis
それがどうなるか教えてください。