問題タブ [strace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gawk - gawk : 特殊記号からデータを抽出する
strace -T から合計時間を取得しようとしていますが、次のように報告されています。
pid コマンド [時刻]
(システムコールごと)
[time] を合計したいと思います。私は gawk を使用していますが、最後のフィールドには $NF でアクセスできることを知っています。ただし、 $NF は時間だけではなく [time] (括弧付き) を報告しますが、これは明らかに合計できません。そのため、 [time] の代わりに時間を取得するにはどうすればよいでしょうか?
ありがとう
linux - strace が引数を省略できないようにしますか?
strace を使用して、プログラムが を使用して実行するコマンドを見つけようとしていますexecve
。これらのコマンドの引数の一部は非常に長く、strace は引数を省略してexecve
(約 30 文字の後に "..." が表示されます)、有用な情報を得ることができません。各引数の全文を取得するにはどうすればよいですか?
man ページを読みました。-v オプションは環境を出力します。これは便利ですが、引数はまだ切り詰められています。
verbose=all も渡してみましたが、これは SIGCHLD に関する追加情報を提供するだけです。
linux-kernel - プロセスを実行するための pull_task() への呼び出しをトレースします。
システム内のプロセスによって pull_task() が呼び出された回数をカウントしようとしています。pull_task() は、ビジー状態の CPU のランキューからアイドル状態の CPU のランキューにタスクを移動するスケジューリング関数です。これを見つけるための簡単なメカニズム (perf top を含む) を見つけることができませんでした。
システムには migration と呼ばれるルート プロセスがあり、このプロセスが pull_task() の呼び出しを担当している可能性があるという予感があります。しかし、このプロセスに strace をアタッチすることもできません。次のエラーがスローされます。
attach: ptrace(PTRACE_ATTACH, ...): 許可されていない操作です。
プロセス「移行」の優先度はリアルタイムです。おそらく、それが strace が接続できない理由でしょうか?
親切なアドバイス。ありがとう。
c - ltraceおよびstraceツールの行番号情報
ライブラリ呼び出し/システム呼び出し情報とともに、行番号とファイル名(ltrace / straceで実行されているプログラムの場合)を表示できる可能性はありますか?
例えば:
ltraceまたはその他のツール: malloc(20) :: code.c::21
ltrace / straceのすべてのオプションを試しましたが、この情報を取得する方法がわかりません。
ltrace / straceで不可能な場合、GNU / Linux用の並列ツールオプションはありますか?
bash - straceを介してコマンドにスペースを含む複数のファイル名を渡すにはどうすればよいですか?
strace、cp、awk、およびstatを使用して、プログレスバー付きのcpを作成するスクリプトがあります。cpを呼び出すコードの部分は次のとおりです。
問題は、スペースを入れて何もコピーできないことです。スペースで機能するように、このスクリプトをどのように変更する必要がありますか?ありがとう
編集:出力は次のとおりです。
最初のものを見ますか?これは正常に機能し、実行されcp -- q file
ます。さて、次は、cp -- q 'file\' 'with\' spaces
どうすれば修正できますか?
strace - strace は、既に実行中のプロセスにどのように接続しますか?
私はそれが仕事をするためにstrace
使用することを知っています、ptrace
TRACE_ME
ただし、対象のプロセスをon で実行する必要があります。
すでに実行中のプロセスの場合には適用されません。
すでに実行中のプロセスでどのように機能しますか?
c - strace は syscall 引数をどのように解釈しますか?
ptrace
実装に使用することは知っていますが、
レジスタで引数を取得でき、
数字だけですが、
strace はどのようにそれらをリテラル情報に変換しますか?
すべてのシステムコールのハードコードだけですか?
linux - 合体する TCP メッセージ
ネットワークに書き込みを行う Java アプリケーションがあります。764b、+/- 5b の領域でメッセージを書き込んでいます。pcap は、ストリームが IP フラグメント化されていることを示しており、これを説明することはできません。
Linux 2.6.18-238.1.1.el5
トレースは次を示します。
( strace -vvvv -f -tt -o strace.out -e trace=network -p $PID )
ネットワークをキャプチャすると、MTU よりも大きなパケットが表示され、断片化が発生しています。
質問:
1) サーバーが 2 つの sendto() を 1 つの IP パケットにバッチ処理しようとしているように見えますが、これは MTU よりも大きいため、断片化されています。なんで?
2) PID 2046 の strace 出力を見ると、等号 <... sendto resumed> 行の後の数字は、送信されたものの合計ですか? つまり、764b は、ライン 3 とライン 5 の合計で送信されましたか? それとも、1 行あたり 764 バイトが送信されていますか?
3)すべての sendto() 出力をログに記録するために strace に渡すことができるオプションはありますか? 何も見つからないようです..
c++ - C++Linuxマルチスレッドのボトルネック。strace -f: `[pid 2646] mprotect(0x7ffe7c030000、4096、PROT_READ | PROT_WRITE)= 0`
私は、ブルートフォース最適化を行う並列化されたC++プログラムを持っています。何らかの理由で、コアあたりの収穫逓減が最大6コアになり、その時点で壁にぶつかり、さらにコアが速度を上げません。これは、8コアまたは16コアのマシンで実行した場合に一貫しています。
実行するstrace -f ./progname
と、プログラムのマルチスレッドセクションで特に発生する次のようなものが大量に発生します。[pid 2646] mprotect(0x7ffe7c030000, 4096, PROT_READ|PROT_WRITE) = 0
そして次々に発生するこれらのいくつか:[pid 2645] mprotect(0x7ffe78030000, 4096, PROT_READ|PROT_WRITE <unfinished ...>
-[pid 2646] <... mprotect resumed> ) = 0
しかし、彼らはいつも同じからではありませんpid
。
コアの数を減らすと、上記のメッセージが少なくなり、2つまたは3つのコアでは何も表示されません。
私が推測できる唯一のことは、多分それは各スレッドで行われる大量のベクトル割り当てとアクセスに関係しているということです。必要に応じて、他のメモリ管理ライブラリは使用していません。
linux - システムコールを介してLinuxのメモリを監視する
Linux でメモリ使用量を測定する方法を探しています。主に3つの方法を見つけましたが、何を使用すればよいかわからないため、ここで意見を求めています。
メモリを監視する最も一般的でおそらく簡単な方法は、 /proc/pid/status を読み取り、適切なフィールド、
VmSize
またはその他を読み取ることVmData
です。これは、プログラム ps、to、vmstat がこの情報を収集する方法です (つまり、/proc/pid/... を監視します)。この情報は、瞬時に情報を提供します。fork に続いて exec を呼び出して監視したいプログラムを実行し、wait4 を呼び出して rusage 構造を埋めることができます。そこから、目的のフィールドを読み取ることができます。Linux では、wait4 は rsusage 構造体のメモリ フィールドを埋めず、CPU 使用量に関連するフィールドのみを埋めているようです。これは、time コマンドがその情報を取得する方法です。
strace コードを変更して、後続のすべての brk、mmap、munmap システム コールを追跡し、合計してヒープ サイズを取得できます。ここで難しいのは、読み取り専用、read|write、exec などの可能なすべての mmap 引数をデコードし、システムが成功したかどうかを知るために戻り値をテストすることです。
3) については、この方法でメモリ使用量を測定できると思いますか? それは難しすぎるでしょうか?私は strace コードをよく理解していますが、これが可能かどうかを知るには、記憶から十分に理解していません。