bepro

【Linuxの基礎知識】vmstatとiostatでボトルネックを見抜く

Linuxサーバーの動作が遅いと感じたとき、あなたはまず何を確認しますか? プロセス一覧を眺めたり、topコマンドでCPU使用率を見たりすることは多いでしょう。しかし「遅い原因がCPUにあるのか、メモリ不足なのか、それともディスクI/Oにあるのか」を一度で判断するのは意外と難しいものです。 そんなときに役立つのがvmstatとiostatという2つのコマンドです。vmstatはCPUやメモリ、プロセスの状態を、iostatはCPUとストレージI/Oの状況を数値化して表示してくれるため、サーバー全体のどこに ...

Embeddingでテキストをベクトル化|pgvectorに保存して検索可能にする手順

「AIと会話していて、前に話したことを覚えていないことにストレスを感じませんか?」 「同じ質問を繰り返したり、前の答えを踏まえていない応答にがっかりしたことはありませんか?」 その原因は、AIが会話履歴を“記憶”として保持できない仕組みにあります。そこで登場するのが RAG(Retrieval-Augmented Generation)。過去の会話をEmbeddingモデルでベクトル化し、検索して取り出すことで、あたかも記憶を継承しているような自然な対話が実現できるのです。 この記事では、このRAG環境で ...

【Linuxの基礎知識】dmesgの読み方とハードウェアトラブル対応

Linuxサーバーを運用していて「突然ハードディスクが認識されない」「USB機器が動かない」「ネットワークカードが反応しない」といったトラブルに出くわした経験はありませんか? そんな時に頼りになるのが、カーネルが出力するメッセージを確認できるコマンド dmesg です。 Linuxが起動してから認識したハードウェアや、ドライバの読み込み状況、エラーの詳細までもがここに集約されており、システム管理者にとってはまさに一次診断の必須ツールといえます。 とはいえ、表示されるログは大量で英語メッセージも多く、初心者 ...

PostgreSQL16+pgvector導入手順|個人環境にベクトルDBを構築する方法

PostgreSQLにpgvectorを導入すると、ローカル環境でもベクトル検索が可能になります。 これはRAG(Retrieval Augmented Generation)における「記憶保存」の基盤となり、AIに会話の履歴を保持させるための必須要素です。 この記事では、RHEL系LinuxにPostgreSQL16とpgvectorを導入し、Macからも接続できる個人向けの分散構成を構築する手順を解説します。 なぜpgvectorが必要なのか pgvectorはPostgreSQLにベクトル型を導入す ...

VPSにJavaアプリの開発環境を自動で構築する方法:Apache+Tomcat+PostgreSQL

開発環境を整えるとき、いきなり細かい設定から入ってしまうと、構築の全体像が見えず混乱しがちです。本シリーズでは、5つのパートに分けて順を追って開発環境を構築していきます。 この構成は、構築に必要な順序でステップを並べ(クラウド → Web → AP → DB → 保守)、各パートは独立して読めるようにし、スクリプトによる自動化を前提に操作負担を極力減らす方針に基づいています。ただし、手動で対応すべき設定も明示的に解説します。 構築する環境のイメージ 最終的に以下のような構成になります。 Webサーバ → ...

【RHEL系Linux】サーバーの障害検知と自動通知|systemdログ監視の実装例

RHEL系Linux環境でsystemdユニットのjournaldエラーログを常時監視し、差分検知でLINEやメールに自動通知する方法を解説します。 多重起動防止、PID管理、除外パターン設定など実用運用に必須の設計・実装・運用例を網羅します。 概要 Linuxサーバーの安定稼働を維持するには、障害発生時にいち早く検知し、迅速に対応する体制が必要です。本記事では、systemdのjournaldログを監視し、エラーログや警告をリアルタイムに検知してLINEまたはメールで通知する仕組みを構築します。 また、 ...

ORMにはうんざり!第6回:Java共通DBアクセスクラスの実用例で脱フレームワーク

多くのエンジニアが一度は通る道、それがORM(Object-Relational Mapping)によるデータアクセスの自動化です。しかし、実際の開発現場では「ブラックボックス化してわかりにくい」「SQLが思うようにチューニングできない」「結局、素のJDBCに戻した」などの声が後を絶ちません。 本記事では、そうしたORMに限界を感じたエンジニアに向けて、フレームワークに依存しない共通DBアクセスクラス群の“実用的な使い方”をご紹介します。 第6回となる今回は、MVCモデルをベースに、現場でよくあるユースケ ...

【Linuxの基礎知識】プロセス管理はもうスクリプト不要?systemdの基本と自動監視設定

「プロセスの自動起動や監視って、複雑なスクリプトを書かないと無理だと思っていませんか?」 systemdを使えば、シェルスクリプトを組まずともプロセスの自動起動・再起動・ログ管理が簡単にできるようになります。これまで cron や watch、あるいは自作スクリプトで面倒な運用をしていた方には、目からウロコの運用方法です。 私がシステム監視を覚えた時代は init.d でした。シェルスクリプトでプロセス監視を組み、ログは /var/log/messages を tail で見張っていたものです。今や sy ...

ORMにはうんざり!第5回:例外の闇を断つ、堅牢なJavaエラーハンドリングとログ設計

業務システムの開発において、例外処理とログ出力は「後回しにされがち」な存在です。しかし、実際の運用現場ではエラーが起きたときにその原因を特定できるかどうかが、システムの信頼性と復旧速度を大きく左右します。特にJavaで開発された中〜大規模な業務システムでは、ログの粒度や例外の扱い方ひとつで、障害対応の工数やトラブルの再発率が激変します。 今回の第5回では、共通データアクセスクラス群のなかでも「例外処理」と「ログ出力」にフォーカスし、どのように堅牢なエラー制御と可視化を設計すべきかを具体的に解説していきます ...

【RHEL系Linux】PostgreSQLを自動インストールするシェルスクリプトの使い方

ジョンとの共存など、多くの作業工程で人為的ミスが発生しがちです。本記事では、PostgreSQLのインストール・削除・確認を1本のシェルスクリプトで自動化する方法を解説します。 特定バージョンの導入から、複数バージョンの共存管理、不要なバージョンのアンインストールまでをスムーズに行える仕組みとなっており、現場の手作業を極力排除した再現性の高い構成になっています。 概要と目的 PostgreSQLを複数バージョンで運用している現場では、バージョンごとのポート設定や、重複インストールの防止、削除時の依存関係な ...

ORMにはうんざり!第4回:Java共通ログ出力とsystem.xml設定の構成を解説

エンジニアなら誰もが経験するの下記の調査に時間を奪われるデバッグ地獄です。 「どこで処理が止まったのか分からない」 「ログが不揃いで追跡ができない」 第4回では、この問題を避けるために設計した 共通ログ出力クラス とそれを支える Logger / LogWriter / system.xml(log設定) の構成を整理します。 この共通DBアクセスクラス群では、SELECT・INSERT・UPDATE・DELETE の全処理で ログ出力が自動挿入される設計 を採用しています。開発者が毎回ログを書く必要はあ ...

【Linuxの基礎知識】tcpdumpの使い方と通信トラブルの本質的な見方

ネットワークトラブルが起きたとき、「とりあえずtcpdumpでキャプチャを取ればいい」と言う人は多いですが、実際にはtcpdumpの本質を理解せず、知識だけで“わかったふう”になっているケースが非常に多く見受けられます。 tcpdumpは単なるログ収集ツールではなく、「どこを観測するか」という視点が不可欠なツールです。対象となる通信には必ず送信側と受信側の2地点が存在し、それぞれにtcpdumpを仕掛けて比較することではじめて意味のある解析が可能になります。 それにも関わらず、1台のコンソールだけで状況を ...

【RHEL系Linux】ディスク使用率を自動監視するシェルスクリプトの実装

ディスクの使用率、気づいたときには手遅れになっていませんか? サーバー運用では、容量逼迫によるサービス停止を未然に防ぐことが重要です。 この記事では、あらかじめ定義した閾値を元にディスク使用率を自動監視し、ログに記録するシェルスクリプトの仕組みを解説します。 概要と導入の目的 ディスク容量の逼迫は、サーバー障害の中でも特に予兆を見落としやすく、サービス停止に直結するリスクを持っています。特にバックアップやログ肥大などによる想定外の使用率上昇は、事前に監視しておくことが重要です。本記事では、指定した閾値に基 ...

ORMにはうんざり!第3回:JavaでDB接続の最適化と共通プールの構築

JavaでJDBCを使ってDBアクセスを行う場合、毎回 DriverManager.getConnection() を呼び出して接続・切断を繰り返す構成をよく見かけます。 しかしこのやり方は、アプリケーションの規模や接続頻度が高くなるほど、パフォーマンスのボトルネックになっていきます。 本記事では、シリーズ第3回として、共通DBアクセスクラス内で採用している DBConnectionPoolクラス の設計と仕組みにフォーカスします。このクラスは、自前で構築した簡易的な接続プール機構を用いることで、アプリケ ...

【Linuxの基礎知識】Linuxでログ肥大を防ぐlogrotateの基本と自作アプリ対応法

Linuxで運用中のシステムや自作アプリにおいて、ログファイルが肥大化するとディスク圧迫や解析遅延などの問題が発生します。 本記事では、ログローテート機構であるlogrotateの仕組みと設定方法を整理し、システム標準のログだけでなく、自作アプリケーションのログも安全に管理するための実践的な構成例を紹介します。 logrotateの役割と仕組み Linuxを運用していると、ログファイルが時間とともに肥大化し、ディスク容量を圧迫したり、解析に時間がかかるといった問題が発生します。特にWebサーバやアプリケー ...

【RHEL系Linux】信頼性を重視した完了保証型ディレクトリ転送スクリプトの設計と実装

このページでは、シェルスクリプトを使って、ディレクトリ単位での安全なデータ転送を自動化する方法を解説します。 rsyncによる完全転送とmvによるアトミックなリネーム処理を組み合わせることで、処理の中断や重複転送、破壊的な上書きを防ぐ設計になっています。 ファイル単位の転送とは異なり、ディレクトリ構造を丸ごと扱うことで、業務システムのバックアップや中継処理にも柔軟に対応可能です。設計思想から具体的な実装、活用例まで、現場で役立つポイントを整理してお届けします。 ディレクトリ転送の自動化が必要な背景 サーバ ...

ORMにはうんざり!第2回:共通DBアクセスクラスでSQLを直感的に操作するJava設計

エンジニアとしてJavaでのデータベース連携を行う中で、「設定が多すぎる」「構造が複雑すぎる」といったORM(Object-Relational Mapping)への不満を感じたことはありませんか? 実際、HibernateやJPAのようなライブラリは便利である一方、ちょっとしたDB操作にも大量のアノテーションや設定ファイルが必要になるケースが多く、プロジェクトが肥大化する原因にもなりかねません。 そこで私たちは、あえてORMを使わず、SQLを直接制御できる共通DBアクセスクラス群を独自に設計しました。目 ...

【RHEL系Linux】中間ファイル連携を完全制御するファイル転送スクリプト

夜間バッチや月次処理など、業務で定期的にファイルを受け渡すシーンでは、単純なコピーや移動では不十分なことが多々あります。特に複数プロセス間でのファイル衝突や、処理タイミングのズレによる誤動作、転送失敗によるデータ欠損などは、現場でよくある問題です。今回ご紹介する「ファイル連携スクリプト」は、そうした問題を根本的に回避しつつ、安全に中間ファイルを受け渡すための実用的なシェルスクリプトです。 JP1などのジョブ管理ツールと組み合わせて動作させることも可能で、.finや.endといった制御ファイルによる状態監視 ...

ORMにはうんざり!第1回:シンプルなJava DBアクセスクラスを考えてみた

ORMや巨大なDBアクセスクラスに、正直うんざりしていませんか? カラムを1つ追加するだけで、エンティティ、DTO、マッピング、設定ファイル……と何か所も修正が必要になる今のDBアクセス構造に限界を感じている人も多いはずです。 「もっと簡単に、それでいて本番でも使えるDBアクセスクラスは作れないのか?」という疑問から、今回、設定不要・高汎用性・保守性重視のシンプルなクラス構造を実装しました。 エンジニアとして複数の現場でORMを使ってきましたが、「設定の複雑さ」「動作の見えづらさ」に対する違和感はずっと抱 ...

【RHEL系Linux】リソース(CPU・MEM)監視スクリプトで使用率・異常を検知する仕組み

「サーバーが重くなった原因、すぐに気づけますか?」 定期的なCPUやメモリの使用率チェックを怠ると、いざという時にボトルネックを特定できず、障害対応が後手になります。 本記事では、RHEL系Linux環境で動作する軽量な監視スクリプトを使い、CPU・メモリの使用率を自動で監視し、異常をログで通知する仕組みを紹介します。 「ZabbixやPrometheusは大げさすぎる…」と感じている方にこそ、最小構成で始められる本スクリプトは最適です。 スクリプトの目的と特徴 システム運用において、リソース使用率の監視 ...