巨大なコードが多数のファイルに分散しています。このコードは現在、通常のmallocを使用しています。
パフォーマンスを向上させるためにJemallocを実装したいと思います。また、Jemallocのメモリプロファイラーを使用して、そのコード内ですべての割り当てがどこでどのように行われているかを正確に把握したいと思います。
私はこれを3週間以上試しています。私を助けてください。
前もって感謝します。
jemalloc
プレフィックスなしでビルドすると、すべてmalloc
の関数ファミリが再実装された共有ライブラリが作成されます。
前提:Linux環境
単一の端末で実行する場合、アプリケーションを実行する前に、環境変数を使用LD_PRELOAD
してプリロードできます。jemalloc.so
何かのようなもの:
export LD_PRELOAD=$LD_PRELOAD:/path/to/jemalloc-build/lib/jemalloc.so.1
/etc/ld.so.preload
すべてのアプリケーションが変更の影響を受けるように、ライブラリへのパスを含む新しい行をファイルに追加できます。(これは Debian ベースのシステムでは確実に機能しますが、おそらく他のシステムでも機能します)
jemalloc を /usr/local にインストールしたため、「通常の」ライブラリ パスから外れています。
インストールでは、jemalloc ライブラリを使用してプログラムを起動するためのシェルが親切に作成されました。
ある意味では、Iulius が上で説明した手順を自動化しますが、実行したいプログラムに対してのみ jemalloc を使用します。これが意図された使用である場合、次のことを行うことができます。
まず、その小さなスクリプトがパスのどこかに存在するかどうかを確認します。
me@mypc /root #
which jemalloc.sh
/usr/local/bin/jemalloc.sh
存在する場合は、次の方法でプログラムを実行できます。
me@mypc /root #
jemalloc.sh your-program your-program-arguments &
/usr/local/bin/jemalloc.sh
Iulius が説明した方法と同様の方法を使用していることを確認するために読むことができます。
me@mypc /root #
jemalloc-config --help
jemalloc がどのようにコンパイルされたかを確認するのに役立ち
me@mypc /root #
jemalloc-config --version
、jemalloc のバージョンが表示されます。
このようにして、プログラムを再コンパイルすることなく、jemalloc で正しく動作することを確認できます。その後、最終的な決定を下すことができます。
ジョージ。