Glassfishコンテナーで実行されている古いHudsonを備えたWindows 7マシンがあります。これにより、長い cygwin bash スクリプトによって管理されるビルドが実行されます。スクリプトの一部にループが含まれています。
if [ -d "$STASH_DIR" ]; then
svn status -v images | \
iconv -f cp1250 -t utf-8 | \
sed 's+\\+/+g' | \
grep '^ .*\.\(gif\|png\)$' | \
while read dummy rev author file; do
dat=${file%.???}.dat
if [ -f "$STASH_DIR/$dat.$rev" ]; then
cp -v "$STASH_DIR/$dat.$rev" "$dat"
fi
done || true # Not critical; ignore failures
fi
(大量の画像とそれらを操作するプロセスが非常に遅いため、その結果を別のディレクトリにキャッシュします。プロセスはおそらくはるかに高速になる可能性がありますが、それは別の問題です。)
現在、時折、cpファイルのリストの途中にある がハングします。CPUを消費する無限ループに入り、強制終了する必要があります。私がそうすると、ループが続き、ビルドは正常に終了します。ただし、これは単なるキャッシュであるため、ファイルがコピーされていなくても、ビルドは成功します。
だから私の質問は、これをトラブルシューティングするためにどのようなオプションがありますか? SYSTEM アカウントでサービスとして実行されていますが、私は管理者権限を持っているので、何かをアタッチできるかもしれません。何が役立つかわかりません。そこに Visual Studio があり、そこに任意の cygwin ツールをインストールできますが、バイナリは明らかにデバッグ情報でビルドされていません。
編集:試しました:
resmonプロセスが全速力で実行されていることを除いて、興味深いことは何も示していません。- 興味深いのは、プロセスがcygwin の ps に従って
bash.exeいるのに、Windows ツールによって報告されているということです。/usr/bin/cp - デバッガー(Visual Studio)によると、プロセスにはデバッグ情報がなく(予想される)、
cygwin1.dll(ルートフレームのみ)kernel32.dllからコードを実行しているだけntdll.dllです。実行可能ファイル自体を指すフレームはありません。 - によると
handle.exe、glassfish のログ ファイル (C:\glassfishv3\glassfish\domains\domain1\logs\jvm.log) を開いているだけで、それは作業ディレクトリであり、それに加えて何かC:\Windowsと呼ばれるオブジェクトの束だけです。\BaseNamedObjects\
実行しようとしたとき、cp.exeまたは終了時に失敗する可能性がありますが、それを確認/デバッグする方法はまだわかりません。