User32 イベントID:1074 調査してみた
今日、午後2時過ぎに、突然ノートPCが再起動した。暑いし、熱暴走でもしたのかなーと、流そうとしていたのだけれども、気になったので原因を調べてみた。
イベントログを確認すると、システムログにタイトルのログが出力されていました。
全般タブには
次の理由で、プロセス c:\windows\system32\svchost.exe (ASUSU24E) は、ユーザー NT AUTHORITY\SYSTEM の代わりに、コンピューター ASUSU24E の 再起動 を始めました: オペレーティング システム: Service pack (計画済)
理由コード: 0x80020010
直前のシステムログとアプリケーションログを確認しましたが、特に原因となるようなイベントは、なし。ちなみにWindowsUpdate(月例パッチ)は3日ほど前に手動で適用済み。
ネット上でイベントID 1074を検索しても、目ぼしい回答が見つからなかったので、観点を替えて、理由コード(0x80020010)で検索してみたところ、マイクロソフトのサイト(参照サイト)に理由コードのドキュメントがあったので、もう少し調査を進めてみた。
理由コード:0x80020010は、これ一つで1つの意味を表しているわけではなく、コンビネーションで複数の意味合いを持たせていた。
まずは、0x80000000 SHTDN_REASON_FLAG_PALNNED
Descriptionの記述を確認しても、英語で、シャットダウンは、計画済み。System State Data(SSD)ファイルにシステムの状態が書かれているとある。が、このファイルを生成するには、Windows Error Reportingの設定が必要とある。Windows Error Reporting(参照サイト)の設定には、レジストリを変更する必要があり、デフォルトは無効となっているようだ。
次に、0x00020000 SHTDN_REASON_MAJOR_OPERATINGSYSTEM
Operating system issue.の1行のみ。OSの問題としか書かれていない。
最後に、0x00000010 SHTDN_REASON_MINOR_SERVICEPACK
Sevice pack.の1行のみ。サービスパックの一言のみ。
結果として、電源供給のトラブルで再起動というところまでは判明しましたが、根本原因までは不明です。
User32 イベントID:1074 調査してみた(暫定対策) - gaggitのブログ
へ つづく
参照サイト:
System Shutdown Reason Codes | Microsoft Docs
Windows Error Reportを使ってプロセスがクラッシュした際のダンプファイルを取得できるようにする設定方法
Devel::NYTProfのプロファイラーを試しみた
3,4ヶ月前にPerlで200行ぐらいのコードを書いた。「Perlを最適化する
」サイトを参考にコードの最適化とスレッド化をして実行時間を短縮した。けれども、プロファイラーを使用してどこに時間がかかっているのか、知りたくなった。
先ず、Devel::FastProfというプロファイラーをインストール使用しようとしたが、失敗。cpanの公式サイトを見ると、BUGSの見出しの下にNo Windows! No threadsとあるので、Window版ではインストールできないようだ。半日かかった。orz
次に他のプロファイラに替わり、デファクトスタンドとなったDevel::NYTProfというNew York Timesの有志で作られたモジュールをインストール。
実行は、
perl.exe -d:NYTProf xxxxx.pl
実行結果は、オプションで指定しなければカレントフォルダにnytprof.outが作成される。これはDBファイルなので、そのまま見ることができず、
nytprofhtmlコマンドか、nyprofcsvコマンドを実行することによって、htmlファイルまたはcsvファイルが作成される。
どちらのコマンドも、カレントフォルダにnytprofというフォルダ内にモジュール単位にファイルが作成される。
フォルダ内にindex.htmlをブラウザで開くと、トップにグラフとその次にTop15のサブルーチン名称とコール回数や経過時間等が表形式で表示される。
最下段には、ソースファイル毎に経過時間とさらにそのソースファイルのリンクが表示される。
リンクをクリックすると、ここでも、サブルーチンごとの経過時間の表が上にあり、下段には、ソースコードの1行毎経過時間が表示される。
これは、すごい!!
p.s.
参照サイトの一番下段は、Devel::NYTProfの作成者が書いたこのプロファイラの紹介と最適化の方法が書かれています。
参照サイト:
Perl スクリプトで遅い場所を特定する方法 - Devel::Profiler / Devel::NYTProf - drk7jp
Devel::FastProf - "fast" perl per-line profiler - metacpan.org
Devel::NYTProf - Powerful feature-rich perl source code profiler - metacpan.org
オランダ坂珈琲邸 メール会員について
突然、エクスプローラーとMicrosoft Edgeがおかしくなった
突然、エクスプローラーとMicrosoft Edgeがおかしくなりました。症状としては、エクスプローラーは起動しますが、ファイルを選択して、右メニューの表示がおかしくなります。また、Microsoft Edgeも同様に起動はしますが、数秒後に終了します。
イベントログもアプリケーションログにID:1000として、ログが出力されています。
詳細にログの調査は行っていませんが、対処方法として、再起動を3回行ったところ、エクスプローラーとMicrosoft Edgeとも無事に修復しました。
なんだか、気持ちが悪いです。
Perl File::ReadBackwards を使用してみた
PerlでFile::ReadBackwardsモジュールを使用してみました。このモジュールは、ファイルを逆から読み込むので、ファイルの最後付近にある文字列を抽出したい場合に役立ちます。
使用しているPerlはWindows版なので、このモジュールのレコードセパレータは\r\nなりますが、読み込むファイルはWindows版のcurlの-oオプションの出力ファイルなのに、なぜかレコードセパレータは\nでした。
幸い、このモジュールには、レコードセパレータを変更できるようにnewメソッドの第2引数で指定できます。
修正前:
my $bw = File::ReadBackwards->new($html_file);
修正後:
my $bw = File::ReadBackwards->new($html_file,"\n");
\nは、ダブルクォーテーションで囲ってください。シングルクォーテーションでは、\とnの文字列を改行として認識して、意図した動作をしません。
Perl readline() on closed filehandle
普段は、あるディレクトリの下にファイルを作成していますが、今回、少しでも高速にしようと、RAMディスクのEドライブ直下に書き込みを行っていました。一度目は、ファイルのオープンからクローズまで正常に終了するのですが、再度、実行すると、再オープンに失敗し、タイトルのエラーとなりました。
修正前:
open(FD, "< E:text.log");
修正後:
open(FD, "< E:\\text.log");
PerlがWindows版なので、ディレクトリの区切りには\を2度、重ねることは知っていましたが、ドライブとファイル名の間にも必要でした。
p.s.
また、しょうもないことで時間を食ってしまいました。orz