タグ

メモリに関するrin51のブックマーク (62)

  • ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog

    最近趣味仕事の Web アプリケーションでメモリリークに遭遇して、頑張ってメモリリークの原因を突き止めて修正する、ということがあった。その過程でメモリリークについて色々調べて知見が溜まったので、学習資料の紹介という形でアウトプットしてみる *1。 前置き 紹介する記事がかなり偏っていることに注意 冒頭で触れたメモリリークを解決するために読んだ記事をまとめただけなので、内容にそれなりの偏りがある 例えば id:mizdra が遭遇したメモリリークは全てブラウザ上で発生していたものだったので、これから紹介する内容も主にブラウザにおけるメモリリークに焦点を当てたものになる GC がどうメモリをどう解放しているか、何故メモリリークが発生するのかは全てカット 調べれば色々な記事が出てくるので、必要に応じて読んでください 基的な知識を抑える まずメモリリークとメモリ撹拌の違いを学ぼう どちらも同じ

    ブラウザにおけるメモリリークを解決するために読んでおけると良い資料 - mizdra's blog
  • Rust は何を解決しようとしたのか;メモリとリソースと所有権

    みなさん、 Rust 書いてますか?最近は Rust が楽しくてたまりませんが、のんびりやっていたらなんとなく理解するまで 1 年くらいかかってしまいました。 良い言語なので、できればみなさんにも気軽に手を出してもらいたく、 Rust の中で特に難しい概念とされている話「所有権(ownership)」について簡単にまとめることにしました。 おことわり 今回記述する「所有権」は、英語で "ownership" として表現されるものを和訳した単語です。 今回説明している概念は、「所有権」という言葉よりも "ownership" (およびその対訳である「所有」、「持ち主であること」) のほうが的確であると思いますが、このドキュメントでは「所有権」という言葉を使います。 所有権とは 所有権とは、簡単に言えば「値(データ)を持っている」 「その値を解放することに責任を負っているもの」のことを指します

    Rust は何を解決しようとしたのか;メモリとリソースと所有権
  • リード・コピー・アップデート - Wikipedia

    リード・コピー・アップデート(read-copy-update、RCUと略記)とは、オペレーティングシステムにおいて一種の排他制御[note 1]を実装する同期機構であり、リーダー・ライターロック(英語版)の代替手段として使われることがある。参照において待ち状態が生じず、極めてオーバーヘッドが低い。しかしRCUにおけるデータ更新は、既存の参照者のために古い版のデータ構造を保持しつつ行うため、時間と空間(メモリ)をより多く必要とする。古い版のデータ構造は、既存の参照者が全てアクセスを完了した後で回収される。 概要[編集] RCUでは「参照側クリティカルセクション」という概念があり、通常 rcu_read_lock() と rcu_read_unlock() で挟まれた部分がそれにあたる。参照側クリティカルセクション内にない文は「不活性状態」と呼ばれ、RCUで保護されたデータ構造への参照を保持

  • RCU(Read Copy Update)をちゃんと知る(1)-1 ほんとの概要 - tkokamoの日記

    はじめに ファイルシステムのrcu-walkを理解するためにRCUの勉強から始めようと思ったので書留ます。 RCUとはざっくりこんなものだ、と分かっている前提での記録です。 予想している流れとしては、 概要(概要)← 今回 Linuxでの実装 rcu-walk(RCUの応用先) と考えています。原稿も無いので、次回がいつになるかわかりません(社内勉強会でrcu-walkを語ろうと思っているので完遂はすると思われます) 今回は、wikipediaとかよんでで「?」となった当たりを捕捉。 RCUとは? 図を用いた簡単な理解 複数のタスクで共有するデータの参照/更新をきちんと行う場合、大抵は適切に排他区間をロックによって設けてそれを実現します。 理想的には、タスク間で共有するデータの参照/更新をロックフリーで行えるとよいのですが、一般的にそのようなことを実現する方法は考えられていません。 しかし

    RCU(Read Copy Update)をちゃんと知る(1)-1 ほんとの概要 - tkokamoの日記
  • HTMはメモリ管理の為に生まれてきたんだよ! ΩΩ<な、なんだってー - Software Transactional Memo

    HTMの第一人者にして、obstruction-freeやwait-freeなどの厳密な定義や、CAS命令の数学的な意義を証明し、The Art of Multiprocessor Programmingの著者で、ロックフリーでもSTMでも八面六臂の活躍をしているMaurice Herlihy先生が連名している最近の論文を流し読み。 Aleksandar Dragojevic, Maurice Herlihy, Yossi Lev, Mark Moir: On the power of hardware transactional memory to simplify memory management. PODC 2011: 99-108 「トランザクショナルメモリのパワーでメモリ管理を簡略化する」という感じ。 GCを使わない環境下においてメモリ管理は鬼門になってて、そのせいでC++のロ

    HTMはメモリ管理の為に生まれてきたんだよ! ΩΩ<な、なんだってー - Software Transactional Memo
  • メモリダンプと模様が見える男|kamezawa.hiroyuki

    10年以上前の昔話であり、そんなこともあったのねという話。あるいはエンタープライズサポートってそんなことやってるのねという話。 カーネルメモリダンプLinuxカーネルをエンタープライズに使おうとした企業、富士通やIBM、日立といった企業がこぞってカーネルに入れようとした機能がカーネルがパニックした時に「なぜコケたのか」調べるための機能であった。その最たるものがメモリダンプだった。この機能はカーネルパニックが起きた後のメモリをディスクに吐き出す。この吐き出されたメモリイメージをダンプと呼び、これをデバッガにわせて原因調査をする。 カーネルデベロッパはパニックが起きたら再現条件を探して理詰めでバグを探すのが得意だが、顧客先でパニックが起きたら「再現させてくれ」とは中々言えないのでこの機能はサポートには重要だった。そして、ダンプ調査の技を持つエンジニアも居た。 地雷型メモリ破壊パニック色々と調

    メモリダンプと模様が見える男|kamezawa.hiroyuki
  • 大規模システムでの Linux のメモリ管理

    (This post is also available in English.) この記事は Linux memory management at scale を 著者の Chris Down さんの許可 を得て Hiroaki Nakamura が日語に翻訳したものです。 原文のライセンス は CC BY-SA 4.0 であり、翻訳のライセンスも同じく CC BY 4.0 とします。 cgroup2 プロジェクトでの私の仕事の一部として Linux システムのリソース管理についてエンジニアと話すことに多くの時間をかけてきました。 これらの会話を通じてどんどん明らかになってきた 1 つの事実は多くのエンジニアは、シニア SRE たちでさえも、 Linux のメモリ管理についていくつかのよくある誤解を持っていて、そしてそれが彼らがサポートするサービスやシステムが来確実に稼働したり効率的

    大規模システムでの Linux のメモリ管理
  • TOMCAT殺害事件 - Qiita

    OOMKillerの殺意 顧客EC2のTomcatがアクセスの無い早朝にもかかわらずOOMKillerに突然殺されてしまったので、調査した顛末をたぶん同じような問題に直面されている方もおられるかと思いますので備忘録として記載します。 Javaヒープのチューニングにも多少役立つかと思います。 (この記事はJava8が対象となります。) OOMKillerとはOut of Memory時に、サーバ全体を守るためにメモリーを消費しているプロセスを停止するLinuxの標準機能です。 そのOOMKillerになんとTomcatが突然殺害されてしまいました。 問答無用の辻斬り状態です。 早朝ですのでアクセスログには何も記録されておらず、catalina.outには OpenJDK 64-Bit Server VM warning: Setting LargePageSizeInBytes has no

    TOMCAT殺害事件 - Qiita
    rin51
    rin51 2020/01/10
    この設定項目はeclipseくらいでしか見たこと無いので(Java知らん) 図がありがたい
  • Linuxの不揮発メモリ(NVDIMM対応について(2019年版 補足編) - Qiita

    はじめに (この記事はFujitsu Advent Calendar 2019 24日目の記事です。なお、記事は個人の見解であり、組織を代表するものではありません。) というわけで、今年もNVDIMMこと不揮発メモリの話を書くことにしました。補足編となっているのは、今年はすでに12月の講演で最新状況をほとんど話してしまっていて、その講演の時間内に収められなかった小ネタを補足としてするつもりだからです。 正直言うと、2019年は業務の都合上NVDIMMのお仕事はほとんど何もやっていなかったんです。しかし、過去3回にわたってひたすらNVDIMMの話を書いているせいか、最近はすっかりNVDIMMの人として見られるようになっている気がします。そのおかげで過去の記事をご覧になった大学の先生などから講演のお声がかかるようになってきたというわけです。ありがたいことです。 Outputを外に出すとそれが自

    Linuxの不揮発メモリ(NVDIMM対応について(2019年版 補足編) - Qiita
  • メモリアライメントの話 @ゲームプログラマの小話[開発:メモリ] - Qiita

    コンシューマ機では割と知っておかないとおかしなことになるメモリのアライメントのお話です。自分の場合Windows上でゲームを作っていたときはほとんど意識していなかったため、コンシューマ機をやるときに「なにそれ?」となったトピックになります。 メモリアライメントはバイナリデータを読み込んでC++コードからアクセスしたり、適当なアドレスにnewしたデータをキャストする場合などに意識する必要が出てきます。 アライメントとは アライメントは alignment と書きます。英語の辞書を引くと『整列』といった意味で載っています。 アライメントを気にせずにデータをメモリ上に配置&アクセスすると、パフォーマンスが遅くなったり、ハードウェアによってはCPUが例外をはいて強制終了する、といったことがおこります。 例えば int や float など、4バイトの変数はメモリアドレス的に4バイトの境界に置かない

    メモリアライメントの話 @ゲームプログラマの小話[開発:メモリ] - Qiita
  • Poptrie - panda's tech note

    panda's tech note1. プライバシーポリシー2. このノートの構築3. Network3.1. ネットワークアルゴリズム3.1.1. Radix tree3.1.2. Hash table3.1.3. Poptrie3.1.3.1. IPルーティングとLongest Prefix Matching3.1.3.2. Radix tree3.1.3.3. 高速化アプローチ3.1.3.4. Multiway trie3.1.3.5. Poptrie (basic)3.1.3.6. Poptrie (leafの圧縮)3.1.3.7. Poptrie (Direct Pointing)3.1.3.8. Poptrieの性能評価3.1.3.9. 余談3.1.4. Palmtrie3.2. ネットワーク運用3.2.1. Cisco WLCの証明書設定3.3. 移動通信ネットワーク・システ

  • Linux:キャッシュを開放する(/proc/sys/vm/drop_caches) - あたまんなか

    同じ構成+同じアプリケーションのサーバーなのに片方のサーバーのメモリ使用率が100%近くに張り付いてしまっていたので調査したメモです 正常なサーバー $ free -m total used free shared buffers cached Mem: 3763 3547 215 0 33 1585 -/+ buffers/cache: 1928 1835 Swap: 4095 141 3954 Alerm発生サーバー $ free -m total used free shared buffers cached Mem: 3763 3743 19 0 1178 1240 -/+ buffers/cache: 1325 2438 Swap: 2047 45 2002 meminfoを見てみる cat /proc/meminfoで正常鯖とAlerm鯖を見比べてみます slabtopも見る

    Linux:キャッシュを開放する(/proc/sys/vm/drop_caches) - あたまんなか
    rin51
    rin51 2019/07/23
    echo 3 > /proc/sys/vm/drop_caches とか
  • How do I find the resident memory size of a process on busybox?

  • ISMM 2019 で発表してきました - クックパッド開発者ブログ

    技術部の笹田です。遠藤さんと同じく Ruby のフルタイムコミッタとして、Ruby インタプリタの開発だけをしています。 先日、アメリカのフェニックスで開催された ISMM 2019 という会議で発表してきたのと、同時開催の PLDI 2019 という会議についでに参加してきたので、簡単にご報告します。 カンファレンス会場 ISMM 2019 ISMM は、International Symposium on Memory Management の略で、メモリ管理を専門にした、世界最高の学術会議です。というと凄いカッコイイんですが、メモリ管理専門って凄くニッチすぎて、他にないってだけですね。多分。ACM(アメリカのコンピュータ関係の学会。すごい大きい)SIGPLAN(プログラミングに関する分科会。Special Interest Group)のシンポジウムになります。 発表するためには、他

    ISMM 2019 で発表してきました - クックパッド開発者ブログ
    rin51
    rin51 2019/07/17
    > ISMM は、International Symposium on Memory Management の略で、メモリ管理を専門にした、世界最高の学術会議です。
  • UBIFS file system

    UBIFS file system Adrian Hunter (Адриан Хантер) Artem Bityutskiy (Битюцкий Артём) Adrian Hunter, Artem Bityutskiy (Битюцкий Артём) 2 Plan Plan ● Introduction (Artem) ● MTD and UBI (Artem) ● UBIFS (Adrian) Adrian Hunter, Artem Bityutskiy (Битюцкий Артём) 3 UBIFS scope UBIFS scope ● UBIFS stands for UBI file system (argh...) ● UBIFS is designed for raw flash devices ● UBIFS is not designed for SSD,

  • Linuxカーネル4.1のvmalloc()(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    はじめに スラブアロケータ以外の動的メモリ確保 vmalloc関数 vmalloc関数で使用するデータ構造 vmallocの初期化 vmallocでのメモリ確保 vfree関数でのメモリ解放 その他の非連続メモリ領域からメモリを確保する関数 vmap関数 ioremap関数 /proc/vmallocinfoによるメモリ確保状況の確認 はじめに 前回のLinuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモと同じくドラフト版公開です。こちらはLinuxカーネル4.1のメモリレイアウト(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモで説明しなかったvmalloc()の説明です。 カーネルのバージョンは4.1系です。 文書自体も完成版ではないし、markdownから手作業ではてなblogにコピペして修正してるので章立

    Linuxカーネル4.1のvmalloc()(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • Linuxカーネル4.1のメモリレイアウト(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    はじめに ユーザプロセス空間とカーネル空間 x86_64のメモリレイアウト ダイレクトマップ(ストレートマップ)領域 vmalloc/ioremap領域 仮想メモリマップ %esp fixup stack カーネルテキスト領域 モジュールマッピング領域 vsyscall 固定マップ領域 はじめに 前回のLinuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモと同じくドラフト版公開です。 カーネルのバージョンは4.1系です。 文書自体も完成版ではないし、markdownから手作業ではてなblogにコピペして修正してるので章立てとか変になってるところとかあるかもしれませんが気にしないでください。 一部は文書修正してます。 ユーザプロセス空間とカーネル空間 Linux x86_64では48bit(256TiB)のアドレス空間を使用できます

    Linuxカーネル4.1のメモリレイアウト(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • Linuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    はじめに スラブアローケータ Linuxのスラブアローケータ slabアローケータ slobアローケータ slubアローケータ スラブオブジェクトの管理 使用中リスト スラブのマージ機能 Chache Coloring スラブの不活性化 frozen状態 スラブキャッシュの情報 slubアローケータのデータ構造 データの関連 slubアローケータで使用するデータの関連 スラブのライフサイクル スラブアローケータの機能 スラブキャッシュの作成 スラブキャッシュ生成時に設定するフラグ 空きオブジェクトの管理 空きスラブオブジェクトの設定 スラブオブジェクトの確保 スラブオブジェクトの解放 kmem_cache_cpu構造体のデータクリア スラブの不活性化 スラブの削除 スラブキャッシュの削除 スラブキャッシュのセットアップ slubアローケータで使用するヘルパー関数 __cmpxchg_dou

    Linuxカーネル4.1のSLUBアローケータ(ドラフト) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • How set the "oom_score_adj" when(before) run target program?

  • 【Linux】stressコマンドを使わずに手軽にメモリ負荷をかける方法 - APC 技術ブログ

    ※前回はCPU負荷をかける方法でしたが、今回はメモリ負荷をかける方法のご紹介です 擬似障害などでメモリ負荷をかける際に一般的なstressコマンドですが、標準パッケージではないため、インストールできない場合(勝手にインストールできない、インターネットに接続できない環境など)は以下の方法で手軽にメモリ負荷がかけられます。(メモリ使用率/SWAP) 手順 1.以下のコマンドを実行 メモリ負荷コマンド /dev/null < $(yes) 2.1プロセスでは足りないという方は、バックグラウンドに回して複数実行 メモリ負荷×10 # /dev/null < $(yes) & # /dev/null < $(yes) & # /dev/null < $(yes) & # jobs [1] 実行中 /dev/null < $(yes) & [2]- 実行中 /dev/null < $(yes) & [

    【Linux】stressコマンドを使わずに手軽にメモリ負荷をかける方法 - APC 技術ブログ