GPT-4oといっしょに作ったLinux入門ガイド【アプリケーション負荷調査編】

2024/06/01に公開

はじめに

話題に事欠かない生成AI界隈ですが、最近リリースされたGPT-4oにLinuxの負荷調査ガイドを作ってもらいました。
経験的にはお決まりのパターンはあるのですが、いまどきのもっと便利な方法はないかというときに体系的にまとめてくれるのが生成AIのいいところですね。

あと、「Zipkin」なんかは聞いたこともなかったですが、なかなか面白そうなので今度調べてみようと思います。

以下、GPT-4oが作ってくれたガイドです。
※AIはたまに嘘を付きますのでその点はご了承ください。

Advanced Techniques for Investigating Application Load

Overview

アプリケーションの負荷を詳細に調査するためには、システム全体のリソース利用状況を監視し、特定のアプリケーションの動作をプロファイルする必要があります。以下では、アプリケーションの負荷を調査するための高度な技術とツールについて説明します。

Performance Monitoring Tools

パフォーマンス監視ツールを使用してアプリケーションの負荷を調査します。

Using top and htop

topおよびhtopを使用してシステム全体のリソース使用状況を確認します。

  • topの実行:

    $ top
    
    
  • htopのインストールと実行:

    $ sudo apt install htop
    $ htop
    
    

Using atop

atopを使用してシステム全体のリソース使用状況を詳細に監視します。

  • atopのインストール:

    $ sudo apt install atop
    
    
  • atopの実行:

    $ sudo atop
    
    

Using nmon

nmonを使用してシステムのパフォーマンスをリアルタイムで監視します。

  • nmonのインストール:

    $ sudo apt install nmon
    
    
  • nmonの実行:

    $ nmon
    
    

Application Profiling Tools

アプリケーションのプロファイリングツールを使用して、詳細な負荷情報を取得します。

Using strace

straceを使用してシステムコールのトレースを行います。

  • straceのインストール:

    $ sudo apt install strace
    
    
  • 特定のプロセスのシステムコールをトレース:

    $ strace -p <PID>
    
    
  • コマンドのシステムコールをトレース:

    $ strace -o output.txt -c ls
    
    

Using lsof

lsofを使用してファイルディスクリプタの使用状況を確認します。

  • lsofのインストール:

    $ sudo apt install lsof
    
    
  • 特定のプロセスのファイルディスクリプタを確認:

    $ lsof -p <PID>
    
    
  • 特定のポートを使用しているプロセスを確認:

    $ lsof -i :80
    
    

Using perf

perfを使用してアプリケーションのパフォーマンスをプロファイルします。

  • perfのインストール:

    $ sudo apt install linux-tools-common linux-tools-generic
    
    
  • プロファイリングの実行:

    $ sudo perf record -a -g
    
    
  • プロファイルデータの解析:

    $ sudo perf report
    
    

Application Load Testing Tools

アプリケーションの負荷テストツールを使用して、実際の負荷をシミュレートします。

Using Apache JMeter

Apache JMeterを使用してWebアプリケーションの負荷テストを行います。

  • JMeterのインストール:

    $ sudo apt install jmeter
    
    
  • JMeterの起動:

    $ jmeter
    
    
  • テストプランの作成:
    JMeter GUIでテストプランを作成し、Webアプリケーションの負荷テストを実施します。

Using Siege

Siegeを使用してWebサーバーの負荷テストを行います。

  • Siegeのインストール:

    $ sudo apt install siege
    
    
  • 負荷テストの実行:

    $ siege -c 10 -t 1M <http://yourserver.com>
    
    

Using Locust

Locustを使用してPythonベースの負荷テストを行います。

  • Locustのインストール:

    $ sudo pip install locust
    
    
  • 負荷テストスクリプトの作成:

    from locust import HttpUser, TaskSet, task
    
    class UserBehavior(TaskSet):
        @task(1)
        def index(self):
            self.client.get("/")
    
    class WebsiteUser(HttpUser):
        tasks = [UserBehavior]
        min_wait = 5000
        max_wait = 9000
    
    
  • 負荷テストの実行:

    $ locust -f locustfile.py --host=http://yourserver.com
    
    

Analyzing Application Logs

アプリケーションログを解析して、負荷の原因を特定します。

Using grep and awk

grepおよびawkを使用してログファイルを解析します。

  • ログファイルから特定のパターンを抽出:

    $ grep "ERROR" /var/log/application.log
    
    
  • ログファイルを解析して統計情報を生成:

    $ awk '{print $1}' /var/log/application.log | sort | uniq -c | sort -nr
    
    

Using ELK Stack

ELKスタックを使用してログを集中管理し、可視化します。

  • ELKスタックのインストール:

    $ sudo apt install elasticsearch logstash kibana
    
    
  • Logstashの設定:

    $ sudo nano /etc/logstash/conf.d/logstash.conf
    
    

    設定例:

    input {
      file {
        path => "/var/log/application.log"
        start_position => "beginning"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["localhost:9200"]
      }
    }
    
    
  • Kibanaの起動:

    $ sudo systemctl start kibana
    $ sudo systemctl enable kibana
    
    

Using Distributed Tracing

分散トレーシングを使用して、マイクロサービスアーキテクチャにおける負荷を詳細に解析します。

Using Jaeger

Jaegerを使用した分散トレーシングの実施。

  • Jaegerのインストール:

    $ sudo apt install jaeger
    
    
  • トレースデータの収集と可視化:
    Jaeger UIを使用してトレースデータを分析します。

Using Zipkin

Zipkinを使用した分散トレーシングの実施。

  • Zipkinのインストール:

    $ sudo apt install zipkin
    
    
  • トレースデータの収集と可視化:
    Zipkin UIを使用してトレースデータを分析します。

Conclusion

この章では、アプリケーションの負荷を詳細に調査するための高度な技術とツールについて説明しました。パフォーマンス監視ツール、プロファイリングツール、負荷テストツール、ログ解析、分散トレーシングなど、多岐にわたる技術を駆使して、アプリケーションの負荷の原因を特定し、最適化する方法を学びました。これらの技術を実践することで、アプリケーションのパフォーマンスと信頼性を大幅に向上させることができます。

コメント

ここまでが負荷調査ガイドでここからはパフォーマンスのモニタリングとチューニングガイドです。

Advanced Performance Monitoring and Tuning

Advanced Performance Monitoring Tools

高度なパフォーマンス監視ツールの使用方法について説明します。

perf

カーネルおよびアプリケーションのプロファイリング。

  • perf のインストール:

    $ sudo apt install linux-tools-common linux-tools-generic
    
    
  • プロファイリングの実行:

    $ sudo perf record -a -g
    
    
  • プロファイルデータの解析:

    $ sudo perf report
    
    

bpftrace

eBPFを使用したカーネルレベルのパフォーマンス解析。

  • bpftrace のインストール:

    $ sudo apt install bpftrace
    
    
  • シンプルなスクリプトの実行:

    $ sudo bpftrace -e 'tracepoint:syscalls:sys_enter_execve { printf("%s\\n", comm); }'
    
    

SystemTap

動的トレースツールであるSystemTapの使用方法。

  • SystemTap のインストール:

    $ sudo apt install systemtap systemtap-runtime
    
    
  • スクリプトの実行:

    $ sudo stap -e 'probe kernel.function("do_sys_open") { printf("process %s called open()\\n", execname()); }'
    
    

CPU Performance Tuning

CPUのパフォーマンスチューニングについて説明します。

CPU Isolation

特定のCPUコアを隔離して高パフォーマンスを実現。

  • /etc/default/grub の編集:

    $ sudo nano /etc/default/grub
    
    

    設定例:

    GRUB_CMDLINE_LINUX_DEFAULT="isolcpus=2,3"
    
    
  • GRUB設定の更新と再起動:

    $ sudo update-grub
    $ sudo reboot
    
    

CPU Pinning

特定のCPUコアにプロセスを固定。

  • taskset コマンドの使用:

    $ sudo taskset -c 0,1 command
    
    

Memory Performance Tuning

メモリのパフォーマンスチューニングについて説明します。

HugePages

メモリ管理を最適化するためのHugePagesの設定。

  • HugePagesの設定:

    $ sudo sysctl -w vm.nr_hugepages=128
    $ echo "vm.nr_hugepages=128" | sudo tee -a /etc/sysctl.conf
    
    

NUMA

NUMAアーキテクチャの最適化。

  • numactl コマンドの使用:

    $ sudo apt install numactl
    $ numactl --hardware
    
    
  • 特定のNUMAノードにプロセスを割り当て:

    $ numactl --cpunodebind=0 --membind=0 command
    
    

Disk I/O Performance Tuning

ディスクI/Oのパフォーマンスチューニングについて説明します。

Tuning I/O Scheduler

I/Oスケジューラの調整。

  • スケジューラの確認と設定:

    $ cat /sys/block/sda/queue/scheduler
    $ echo noop | sudo tee /sys/block/sda/queue/scheduler
    
    

Tuning Filesystems

ファイルシステムの調整。

  • tune2fs を使用した設定変更:

    $ sudo tune2fs -o journal_data_writeback /dev/sda1
    
    

Network Performance Tuning

ネットワークのパフォーマンスチューニングについて説明します。

Network Interface Tuning

ネットワークインターフェースの調整。

  • ネットワークインターフェースの設定:

    $ sudo ethtool -G eth0 rx 4096 tx 4096
    
    
  • インターフェースキューの調整:

    $ sudo ethtool -L eth0 combined 4
    
    

TCP/IP Stack Tuning

TCP/IPスタックの調整。

  • /etc/sysctl.conf の編集:

    $ sudo nano /etc/sysctl.conf
    
    

    設定例:

    net.core.netdev_max_backlog = 5000
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    net.ipv4.tcp_congestion_control = bbr
    
    
  • 設定の適用:

    $ sudo sysctl -p
    
    

Application Performance Tuning

アプリケーションのパフォーマンスチューニングについて説明します。

Database Optimization

データベースのパフォーマンスチューニング。

  • MySQLの設定:

    $ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
    

    設定例:

    [mysqld]
    innodb_buffer_pool_size = 2G
    query_cache_size = 128M
    
    
  • PostgreSQLの設定:

    $ sudo nano /etc/postgresql/12/main/postgresql.conf
    
    

    設定例:

    shared_buffers = 512MB
    work_mem = 128MB
    
    

Web Server Optimization

Webサーバーのパフォーマンスチューニング。

  • Apacheの設定:

    $ sudo nano /etc/apache2/apache2.conf
    
    

    設定例:

    KeepAlive On
    MaxKeepAliveRequests 200
    KeepAliveTimeout 2
    
    
  • Nginxの設定:

    $ sudo nano /etc/nginx/nginx.conf
    
    

    設定例:

    worker_processes auto;
    worker_connections 2048;
    keepalive_timeout 65;
    
    

Monitoring and Profiling Tools

監視とプロファイリングツールの高度な使用方法について説明します。

Prometheus and Grafana

PrometheusとGrafanaを使用した高度な監視。

  • Prometheusのインストール:

    $ sudo apt install prometheus
    
    
  • Grafanaのインストール:

    $ sudo apt install grafana
    
    
  • Prometheusの設定:

    $ sudo nano /etc/prometheus/prometheus.yml
    
    

    設定例:

    scrape_configs:
      - job_name: 'node'
        static_configs:
          - targets: ['localhost:9090']
    
    
  • Grafanaの起動:

    $ sudo systemctl start grafana-server
    $ sudo systemctl enable grafana-server
    
    

ELK Stack

ELKスタック(Elasticsearch、Logstash、Kibana)を使用したログの集中管理。

  • Elasticsearchのインストール:

    $ sudo apt install elasticsearch
    
    
  • Logstashのインストール:

    $ sudo apt install logstash
    
    
  • Kibanaのインストール:

    $ sudo apt install kibana
    
    
  • Logstashの設定:

    $ sudo nano /etc/logstash/conf.d/logstash.conf
    
    

    設定例:

    input {
      file {
        path => "/var/log/syslog"
        start_position => "beginning"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["localhost:9200"]
      }
    }
    
    
  • Kibanaの起動:

    $ sudo systemctl start kibana
    $ sudo systemctl enable kibana
    
    

Conclusion

この章では、Linuxシステムの高度なパフォーマンス監視とチューニングについて詳しく説明しました。プロファイリングツール、CPU、メモリ、ディスクI/O、ネットワークのパフォーマンスチューニング、アプリケーションの最適化、PrometheusとGrafanaを使用した高度な監視、ELKスタックを使用したログ管理など、多岐にわたる技術を学びました。これらの技術を実践することで、Linuxシステムのパフォーマンスと効率を大幅に向上させることができます。

まとめ

いかがでしたでしょうか? まるで親切な相棒のように手取り足取り教えてくれました。
自分でまとめるのも大変なのでGPT-4oなど生成AIをうまく活用していきましょう。

https://www.amazon.co.jp/dp/B0C1VWSPV8

Discussion