私はSolarisの専門家ではなく、Windowsオペレーティングシステムに精通しています。とにかく、何が起こっているのかを把握するのが難しいですが、答えが見つかりません。
私たちは、Solaris 10を実行している3つのLDOMと共に、Solaris 11を実行する物理サーバーを持っています。各LDOMには1つのゾーンがあります(構成がまったくないグローバルゾーンを除く)。ゾーンはSolaris 8です(このゾーンで実行されているアプリケーションは8以上のSolarisバージョンをサポートしていないためです)。
これで、データベースが1つのディスクにあり、ソフトウェアと他のエントリが別のディスクにある領域に問題があります。ユーザーは遅いサーバーの速度について文句を言った。
topとiostatを使ってステータスを確認すると、次のようになります。
load averages: 1.82, 1.74, 2.71 09:45:06
1047 processes:1040 sleeping, 2 zombie, 2 stopped, 3 on cpu
CPU states: 85.0% idle, 11.5% user, 3.5% kernel, 0.0% iowait, 0.0% swap
Memory: 56G real, 12G free, 25G swap in use, 8798M swap free
最大荷重値は
5.xx 6.xx
CPU States: 40% idle,
Memory: 4G free
iostat結果によると
root # iostat -xtc
extended device statistics tty cpu
device r/s w/s kr/s kw/s wait actv svc_t %w %b tin tout us sy wt id
vdc0 0.3 1.0 4.4 14.2 0.0 0.0 33.1 0 0 2 112 141 172 0 162
vdc1 40.9 3.6 667.9 78.7 0.0 0.2 3.4 0 8
vdc2 2.0 1.0 127.1 5.1 0.0 0.0 2.7 0 0
vdc3 0.0 3.8 0.0 90.9 0.0 0.0 3.8 0 1
vdc4 62.6 31.5 17615.7 1232.5 0.0 7.4 78.9 1 82
vdc5 12.5 7.9 281.2 421.3 0.0 0.1 7.2 0 4
vdc6 0.0 0.0 0.0 0.0 0.0 0.0 2.8 0 0
vdc7 0.0 7.3 0.0 451.0 0.0 0.0 2.1 0 1
vdc8 40.6 3.6 667.9 78.8 0.0 0.1 3.3 0 8
DBが配置されているディスク4(vdc4)は常に高い%b比を持ち、常に少なくとも1つのプロセス待機(%w)があります。ビューには良くありませんが、150人を超えるユーザーがアクセスしていると思います。大丈夫です。間違っていたら訂正してください。
今、ユーザーがいつでも奇妙なことに、ルートは文句を言う間、うまく動作します。サーバーのリソースが不足しているかどうかにかかわらず、常に同じ問題が発生します。
ユーザーの唯一のプロセスである実行中のプログラムを確認してください。
# ps -fu user
UID PID PPID C STIME TTY TIME CMD
user 6027 6024 0 08:13:14 pts/15 0:00 -ksh
user 186 181 0 09:40:48 pts/4 0:00 -ksh
user 555 15455 0 09:42:52 ? 0:00 in.ftpd
user 14114 14104 0 08:42:06 pts/7 0:00 -ksh
user 24325 14114 0 09:15:28 pts/7 0:00 tail -f XXXXXXXX
user 26 15119 0 May 30 ? 0:35 ./oplinkse_SGCR6
user 8412 15119 0 01:59:24 ? 0:01 XXXXXXXXXXXXXXXXXXXX
user 27 26 0 May 30 ? 7:00 ./oplinkse_SGCR6
user 1504 6027 0 09:46:24 pts/15 0:00 tail -f XXXXXXXX
user 5818 5815 0 08:12:39 pts/14 0:00 -ksh
彼らはただいくつかのファイルを見て、2つのopenlinkセッションを介してデータベースに接続します。何も実行せずにls -l
3つのファイルがあるディレクトリが必要な場合でも、時間がかかります(時々1分まで)。
問題を見つけるために何を確認できますか?
私はインターネットを見ましたが、私が見つけたのはSSH経由のユーザーの遅いログインプロンプトです。これはログインプロンプトがすぐに表示されますが、ログイン後にコマンドを実行するとそこにとどまるため、ここでは何も起こりません。長期。
答え1
まず、これを拡張することができます:「ユーザーはサーバーが遅いと文句を言っています。」一部の表現はネットワーク待ち時間を意味し、一部はアプリケーションの速度低下を意味します。
LDOM(現在Oracle VM for SPARC)を使用しているため、SPARCサーバーを使用する必要があります。ハードウェアv11およびLDOMのバージョンも便利です。また、各LDOMの構成を提供する必要があります。たぶん設定の問題ですか?
また、(1)Solaris 10 LDOM(v10を実行できないようです)と(3)v11システムでSolaris 8タグ領域を使用してより良いパフォーマンスが得られるかどうか疑問に思います。現在の(3)ldom構成と比較してみてください。それぞれは、(1)Solaris 8ラベルのあるゾーンを実行します。
答え2
これは実際には答えではありませんが、これに対するコメントは機能しません。これは回答を得るのに役立つトラブルシューティングツールです。
このDTraceスクリプトは、システムカーネルが時間を費やす場所をよく示しています。
#!/usr/sbin/dtrace -s
#pragma D option quiet
profile:::profile-1001hz
/ arg0 /
{
@hot[ arg0 ] = count();
}
dtrace:::END
{
printa( "%@u %a\n", @hot );
}
これはすべてのカーネルスレッドの現在の機能の多くのサンプルをキャプチャするため、システムが小規模なワークセットを実行するのに多くの時間を費やす場合、この小さなスクリプトはそれをすばやく明らかにします。
実際のカーネルスタックを表示するには、次のものを使用できます。
#!/usr/sbin/dtrace -s
#pragma D option quiet
profile:::profile-1001hz
/ arg0 /
{
@hot[ stack() ] = count();
}
dtrace:::END
{
printa( "%@u %a\n", @hot );
}
たとえば、ファイルに保存してファイルを実行可能にし、次のhot.d
コマンドを使用してchmod 755 hot.d
rootとして実行します ./hot.d
。いかなる出力も放出しません。しばらく(例:30秒)実行してみてください。次にCTRL-C
[停止]をクリックします。次に、特定のスタックトレースが、観察された回数の昇順で実行時に見つかったすべてのサンプリングされたカーネル現在の関数またはスタックトレースをエクスポートします。
出力の最後のいくつかの関数またはスタックトレースにより、システムがほとんどの時間実行することが明らかになる可能性があります。
たとえば、カーネルが断片化されたメモリページをOracleデータベースに必要な巨大なページにマージするなどのタスクを実行するのにほとんどの時間を費やしている場合は、すぐにそれを確認できます。
Solaris 11ハイパーバイザーで実行し、各大域ゾーンで実行します。