問題の説明 最近、いくつかのマシンで、一日のさまざまな時間に次の警告メッセージが表示されました。 3月26日 20:55:03 host1 カーネル: 警告: fs/xfs/xfs_aops.c:1045 xfs_vm_releasepage+0xcb/0x100 [xfs]() 3月26日 20:55:03 host1 カーネル: リンクされているモジュール: nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack iptable_filter ip_tables ebtable_filter ebtables ip6table_ フィルター ip6_tables devlink ブリッジ stp llc xt_multiport sunrpc dm_mirror dm_region_hash dm_log dm_mod intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel kvm irqbypa ss crc32_pclmul ghash_clmulni_intel aesni_intel lrw gf128mul glue_helper ablk_helper cryptd iTCO_wdt iTCO_vendor_support dcdbas ipmi_devintf ipmi_si sg pcspkr ipmi_msg ハンドラー shpchp i2c_i801 lpc_ich nfit libnvdimm acpi_power_meter kgwttm(OE) xfs libcrc32c sd_mod crc_t10dif crct10dif_generic crct10dif_pclmul crct10dif_common crc32c_i ntel mgag200 drm_kms_helper igb syscopyarea sysfillrect sysimgblt ptp fb_sys_fops ttm pps_core dca ahci drm i2c_algo_bit libahci megaraid_sas i2c_core libata 3月26日 20:55:03 ホスト1 カーネル: fjes [最終アンロード: nf_defrag_ipv4] 3月26日 20:55:03 ホスト1 カーネル: CPU: 10 PID: 224 通信: kswapd0 汚染: G OE ------------ 3.10.0-514.21.2.el7.x86_64 #1 3月26日 20:55:03 ホスト1カーネル: ハードウェア名: Dell Inc. PowerEdge R640/0W23H8、BIOS 1.3.7 2018年2月8日 3月26日 20:55:03 ホスト1 カーネル: 000000000000000 00000000e02a0d05 ffff88103c7ebaa0 ffffffff81687073 3月26日 20:55:03 ホスト1 カーネル: ffff88103c7ebad8 ffffffff81085cb0 ffffea0000687620 ffffea0000687600 3月26日 20:55:03 ホスト1 カーネル: ffff88004a71daf8 ffff88103c7ebda0 ffffea0000687600 ffff88103c7ebae8 3月26日 20:55:03 ホスト1カーネル: コールトレース: 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81687073>] dump_stack+0x19/0x1b 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81085cb0>] warn_slowpath_common+0x70/0xb0 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81085dfa>] warn_slowpath_null+0x1a/0x20 3月26日 20:55:03 ホスト1 カーネル: [<ffffffffa038bfdb>] xfs_vm_releasepage+0xcb/0x100 [xfs] 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81180b22>] try_to_release_page+0x32/0x50 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81196ad6>] 縮小アクティブリスト+0x3d6/0x3e0 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81196ed1>] shrink_lruvec+0x3f1/0x770 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff811972c6>] シュリンクゾーン+0x76/0x1a0 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff8119857c>] balance_pgdat+0x48c/0x5e0 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81198843>] kswapd+0x173/0x450 3月26日 20:55:03 ホスト1カーネル: [<ffffffff810b1b20>] ? wake_up_atomic_t+0x30/0x30 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff811986d0>] ? balance_pgdat+0x5e0/0x5e0 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff810b0a4f>] kthread+0xcf/0xe0 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff810b0980>] ? kthread_create_on_node+0x140/0x140 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff81697698>] ret_from_fork+0x58/0x90 3月26日 20:55:03 ホスト1 カーネル: [<ffffffff810b0980>] ? kthread_create_on_node+0x140/0x140 3月26日 20:55:03 ホスト1 カーネル: ---[ トレース終了 24823c5c7a1ea2be ]--- これらのマシンのカーネルとアプリケーションのクラッシュ情報は、abrtd サービスによって引き継がれます。abrt-cli を通じて概要情報を表示できます。 # abrt-cli リスト --since 1547518209 id 2181dce8f72761585cb6a904dbff1806c1315c27 理由: 警告: fs/xfs/xfs_aops.c:1045 xfs_vm_releasepage+0xcb/0x100 [xfs]() 時刻: 2019年3月23日(土)午後8時30分45秒(中部標準時) コマンドライン: BOOT_IMAGE=/boot/vmlinuz-3.10.0-514.16.1.el7.x86_64 root=/dev/sda1 ro crashkernel=auto net.ifnames=0 biosdevname=0 パッケージ: カーネル uid: 0 (ルート) カウント: 1 ディレクトリ: /var/spool/abrt/oops-2019-03-23-20:30:45-163925-0 カーネルのバージョンは次のとおりです。
分析処理 Red Hat ナレッジベース Red Hat ナレッジベースのドキュメントを参照してください。このタイプの xfs 警告メッセージは、xfs モジュールがコード パスを通過するときに出力されますが、ホストの使用には影響しません。この警告メッセージを回避するには、カーネルを kernel-3.10.0-693.el7 にアップグレードします。詳細については、redhat-access-2893711 を参照してください。
コード分析 Red Hat Knowledge Base にはメモリリサイクルに関する情報は記載されていませんが、スタック情報から判断するとカーネルによるメモリリサイクルが原因と思われます。該当時点でのメモリ使用量は以下のとおりです。 04:30:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty ...... 午後8時40分01秒 513940 130976220 99.61 876 104616380 28610584 21.76 92439660 34840920 524 午後8時50分01秒 479896 131010264 99.64 876 104666496 28557292 21.72 92513872 34804240 400 午後9:00:01 455948 131034212 99.65 876 104675712 28588852 21.74 92418724 34926132 572 午後9時10分01秒 556980 130933180 99.58 876 104610352 28552656 21.71 94287212 32983892 900 # sysctl vm.min_free_kbytes vm.min_free_kbytes = 90112 20:50 から 21:00 の間に使用可能なメモリが増加しなかったため、システムがメモリ回復操作を実行していない可能性があります。カーネル ログのスタック情報によると、関数呼び出しの関係がわかります。 アクティブリストを縮小 -> リリースページを試行 -> xfs_vm_releasepage //ソース/mm/ファイルマップ.c 3225 int try_to_release_page(構造体ページ*ページ、gfp_t gfp_mask) 3226 { 3227 構造体 address_space * const マッピング = page->mapping; ...... 3233 if (マッピング && マッピング->a_ops->リリースページ) 3234 マッピング->a_ops->releasepage(page, gfp_mask); を返す xfs_vm_releasepage 3235 try_to_free_buffers(ページ) を返します。 3236 } //ソース/fs/xfs/xfs_aops.c 1034 静的整数 1035 xfs_vm_リリースページ( 1036 構造体ページ *ページ、 1037 gfp_t gfp_マスク) 1038 { 1039 int delalloc、未書き込み。 1040 1041 trace_xfs_releasepage(page->mapping->host, page, 0, 0); 1042 1043 xfs_count_page_state(ページ、&delalloc、&unwritten); 1044 1045 の場合 (WARN_ON_ONCE(delalloc)) 1046 0 を返します。 1047 if (WARN_ON_ONCE(未書き込み)) 1048 0 を返します。 1049 1050 try_to_free_buffers(ページ) を返します。 1051 } ...... 1827 定数構造体アドレス空間操作 xfs_address_space_operations = { 1833 .releasepage = xfs_vm_releasepage、 カーネル ログ kernel: WARNING: at fs/xfs/xfs_aops.c:1045 に対応して、ソース ファイル source/fs/xfs/xfs_aops.c の 1045 行目にスタック情報が出力されていることがわかります。実際、try_to_free_buffers は実行されておらず、すでに次の結果が返されています。 1045 の場合 (WARN_ON_ONCE(delalloc)) 1046 0 を返します。 WARN_ON_ONCE は比較的単純で、ソース ファイル source/include/asm-generic/bug.h にあります。 73 #define __WARN() warn_slowpath_null(__FILE__, __LINE__) 85 #define WARN_ON(条件) ({\ ... 88 __WARN(); \ 136 #define WARN_ON_ONCE(条件) ({ \ .... 140 あり得ない(__ret_warn_once)) \ 141 if (WARN_ON(!__warned)) \ __WARN 関数はスタック情報内の warn_slowpath_null 関数を呼び出し、次に warn_slowpath_common 関数を呼び出してスタック情報を出力します。 //ソース/カーネル/パニック.c 517 void warn_slowpath_null(const char *ファイル、int 行) 518 { 519 warn_slowpath_common(ファイル、行、__builtin_return_address(0)、 520 TAINT_WARN、NULL); 521 } 463 静的 void warn_slowpath_common(const char *file, int line, void *caller, 464 符号なし汚染、構造体 slowpath_args *args) 465 { 466 警告時にトレースを無効にする(); 467 468 printk(KERN_WARNING "------------[ ここでカット ]-------------\n"); 469 printk(KERN_WARNING "警告: %s:%d %pS()\n", ファイル、行、呼び出し元); 470 471 の場合 (引数) 472 vprintk(args->fmt, args->args); ...... 485 print_modules(); 486 ダンプスタック(); 487 print_oops_end_marker(); このスタック メッセージは、Red Hat ナレッジベースの説明と一致した単なる警告であり、ホストの使用には影響しないことが大まかにわかります。 まとめ 上記のソースファイル内の関数から、kswapd がメモリを解放するときに xfs_vm_releasepage が呼び出される限り、スタック情報を印刷することができます。スタックが印刷されると、try_to_free_buffers 操作が実行されないため、メモリ使用量をチェックしたときに使用可能なメモリは増加しません。スタック情報を表示したくない場合は、disable_trace_on_warning 関数に対応する kernel.traceoff_on_warning カーネルパラメータをオンにすることで、スタックプロンプトをオフにすることができます。ただし、これをオフにすると、他のカーネル情報は印刷されなくなります。したがって、この観点からは、カーネルバージョンをアップグレードする以外にこの情報を回避できる方法はありません。 さて、今回の記事は以上です。この記事の内容が皆さんの勉強や仕事に少しでも参考になれば幸いです。123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: ランキングを取得するためのMySQLソートの例コード
>>: Vue における $router と $route の違いの詳細な説明
目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...
多くの場合、大規模および中規模の Web サイトでは、静的リソース (フォント ファイル、画像など)...
概要: MySQL は、トランザクションをサポートするためにさまざまなストレージ エンジンを提供しま...
目次序文1. リスナーの基本的な使い方2. リスナー形式3. ページに入るとすぐに監視とディープモニ...
ヒント:配列変更メソッドによりv-forが更新され、ページが更新されます。配列を変更しないメソッド:...
1. InnoDBストレージエンジンを使用する必要がありますCPU と IO のパフォーマンスが向上...
DockerでRedisをデプロイするまずLinuxにDockerをインストールし、次にDocker...
最近、Linux を使用してローカルにログインしていたところ、正常にログインできず、次のエラー メッ...
1. CSS3の三角形は特殊効果でズームし続けます11.1 画像プレビュー 11.2 index.h...
目次1. 指令とは何ですか? Vue でよく使われる組み込みの v ディレクティブv-if と v-...
以前は、ほとんどすべての Web サイトに、すべてのページをリストしたサイトマップ ページがありまし...
クエリキャッシュ制限query_cache_limit は、単一のクエリで使用できるバッファ サイズ...
最初のステップは、圧縮されたパッケージを対応するディスクに解凍することです。 2 番目の手順は、cm...
目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...
目次1.parseInt(文字列、基数) 2. 数値() 3.parseFloat()主なメソッドは...