k-likework

息子を育て、自分も育つ。LIKEWORKで生きるためのブログ

CentOSに違うバージョンのJDKを追加してみる

メモ:既にJavaがインストールされているLinuxに別バージョンのJavaをインストールしてみる

環境確認

# Linuxの確認
[root]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

# Javaの確認
[root]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
-->既にJava1.8がインストールされてる

Java1.9を入手して、サーバにアップロード

RPMをダウンロードする

Java1.9をインストール

[root]# cd /tmp/
[root]# rpm -ivh jdk-9.0.4_linux-x64_bin.rpm

LinuxはどっちのバージョンのJavaを見ているか

[root]# java -version

Javaのバージョンの向きを変更する

# 「+」が付いているのは現在向いているJavaのバージョン

[root]# alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
 + 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre/bin/java)
*  2           /usr/java/jdk-9.0.4/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: 2 [Enter]

[root] # java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
-->向いているJavaのバージョンが変更された

Linux OS起動時に特定のプロセスを自動起動する方法

メモ:Linux OSを再起動したら特定のプロセスも自動起動してほしいとお客様の要望を受けて…のメモ

Linux OS起動時に、特定のプロセスを自動起動する設定手順

1. 起動スクリプトをサーバに配置する

特定のプロセスを起動するスクリプトを用意して、対象サーバに配置

# /tmp/配下に配置例
[root] ls -la /tmp/

2. スクリプトを/etc/init.dに配置する

[root] cp -p /tmp/<スクリプト> /etc/init.d/
[root] chkconfig --add <スクリプト>
[root] chkconfig --list
-->スクリプトが/etc/init.d/に配置されたことを確認する

3. Linux OSの動作モード(ランレベル)を設定する

[root] chkconfig <スクリプト> on
[root] chkconfig --list
-->ランレベル2~5がonになったことを確認する

4. スクリプトで特定プロセスが起動することを確認する

5. スクリプトLinux OS起動時に自動的に実行されるコマンドとして設定

[root] vi /etc/rc.local

-->下記を追加する
./<スクリプト> start

6. Linux OS起動時に対象のプロセスが起動することを確認する

[補足] スクリプトを/etc/init.d/配下から削除する場合

[root] chkconfig --del <スクリプト>
[root] chkconfig --list
-->スクリプトが/etc/init.d/にないことを確認する

STATSPACK

メモ:STATSPACKの使用でSTASPACK用の表領域が増加していたので、STATSPACKの基本的なことを知るメモ

STATSPACKとは

  • 「 スタッツパック」と読みます。
  • Oracle8iリリースから使用できるパフォーマンス診断ツールです。
  • Oracleの性能情報を確認できるので、障害時やチューニングに役立ちます。

STATSPACKの使用方法

  • STATSPACKはインストールが必要です。
  • 今回の環境は「Windows版のOracle12.1.0.2」です。
  • STATSPACKのインストールで使用するSQLは、$ORACLE_HOME\RDBMS\ADMIN配下にあります。

1. STATSPACK用の表領域を作る

$ sqlplus / as sysdba
SQL> CREATE TABLESPACE STATSPACK 
DATAFILE 'C:\app\statspack' SIZE 100M  AUTOEXTEND ON 
SEGMENT SPACE MANAGEMENT AUTO;

2. STATSPACKのインストール

STATSPACKのインストールSQLを流した後、対話式になります。

SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spcreate.sql
perfstat_password: perfstat 
default_tablespace: STATSPACK 
temporary_tablespace: TEMP 

3. スナップショットを自動で収集する設定

デフォルトは1時間ごとに収集します。
このままだとSTATSPACK表領域のサイズが増加し続けるので、スナップショットを削除する設定も忘れないようにします。

$ sqlplus perfstat/perfstat
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spauto.sql

スナップショット自動設定の確認をします。

SQL> select interval,what from dba_jobs;

INTERVAL
-----------------------------------------------------
WHAT
-----------------------------------------------------
trunc(SYSDATE+1/24,'HH')
statspack.snap;

4. スナップショットの収集間隔を変更

デフォルト1時間ごとから30分単位に変更します。

$ sqlplus perfstat/perfstat
SQL> execute dbms_job.interval(1, 'SYSDATE+(1/48)');

変更内容を確認します。

$ sqlplus / as sysdba
SQL> select interval,what from dba_jobs;

INTERVAL
---------------------------------------------------
WHAT
---------------------------------------------------
SYSDATE+(1/48)
statspack.snap;

5.スナップショットのレベルを変更する

デフォルトはレベル5です。 レベル5から7に変更します。

$ sqlplus perfstat/perfstat
SQL> exec statspack.modify_statspack_parameter (i_snap_level=>7)
SQL> select snap_level from stats$statspack_parameter;

6. レポートを出力してみる

収集したスナップショットをレポートに出力します。

$ sqlplus perfstat/perfstat
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spreport.sql

Listing all Completed Snapshots

                                                       Snap
Instance     DB Name        Snap Id   Snap Started    Level Comment
------------ ------------ --------- ----------------- ----- -------------------
orautf8      ORAUTF8              1 06 11月 2018 14:0     5  0
                                  2 06 11月 2018 15:0     5   0

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください: 1
Begin Snapshot Id specified: 1

end_snapに値を入力してください: 2
End   Snapshot Id specified: 2

Specify the Report Name 
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_2.  To use this name,
press <return> to continue, otherwise enter an alternative.

report_nameに値を入力してください: [Enter]

==============================
 データがたくさん表示
==============================

End of Report ( sp_1_2.lst ) ←レポートが¥「sp_1_2.lst」が作成された
SQL>

作成されたファイルはカレントディレクトリで確認

7. スナップショットの自動収集を停止する方法

自動収集のジョブを削除します。

# ジョブ番号を確認する
sqlplus perfstat/perfstat
SQL> select job, what from dba_jobs; 
JOB WHAT
1
---- ------------------------------
statspack.snap;

# 確認したジョブ番号を削除する
SQL> execute dbms_job.remove(ジョブ番号); 

# 削除したジョブが表示されないことを確認する
$ sqlplus perfstat/perfstat
SQL> select interval,what from dba_jobs;

8. スナップショットの削除方法

スナップショットを持ち続けるとSTATSPACK表領域が増加し続けます。削除方法は何通りかあります。

  • 日付を指定して削除する

8日より前のスナップショットを削除します

$ sqlplus perfstat/perfstat
SQL> exec statspack.purge(8);
  • 全てのスナップショットを削除
$ sqlplus perfstat/perfstat
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\sptrunc.sql
  • 自動でスナップショットを削除する設定

DBMS.JOBSに「statspack.purge(1)」プロシージャを登録する

SUBMIT( ジョブ番号, PLSQLプロシージャ名, 次回実行日付, 実行間隔 );
# 即時実行して、1日ごとに1日より前のスナップショットを削除する

$ sqlplus perfstat/perfstat
SQL> DECLARE
 JOB_NO binary_integer;

BEGIN
 DBMS_JOB.SUBMIT(JOB_NO,'statspack.purge(1);',INTERVAL=>'sysdate+1');

COMMIT;

END;
/

もう少し勉強したら追加。きっと明日には。

9. STATSPACKのアンインストール

$ sqlplus / as sysdba
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spdrop.sql

AES

メモ:暗号化は難しい…製品の仕様に出てきたので触りを調べたメモ。

AESとは?

  • Advanced Encryption Standardの略。
  • 2001年から、DESに代わるアメリカの共通鍵暗号の規格。
  • ブロック長は128ビット固定、鍵長は128ビット、192ビット、256ビットが利用可能。
  • AESの元となった方式は、鍵長やブロック長が可変。

DES

  • Data Encryption Standardの略。
  • 1976年に採用された、共通鍵暗号の規格。
  • 鍵長が56ビットと短く、現在は安全ではないと見られている。

DESの後継となる共通鍵ブロック暗号の公募要件

  • 世界中で制限なく無料で利用できること
  • 詳細なアルゴリズム仕様を公開すること
  • ANSI CとJavaによる実装にすること
  • 暗号強度評価を公開すること

21方式の応募 → 公募要件を満たした15方式を評価 → 最終候補として5方式 → 採用

AESの暗号化の方法

  1. 鍵生成を行う
  2. SubBytes:換字表(Sボックス)による1バイト単位の変換
  3. ShiftRows:4バイト単位の行を一定規則で左シフト
  4. MixColumns:ビット演算による4バイト単位の行列変換
  5. AddRoundKey:ラウンド鍵とのXORをとる
  6. 2~5を1ラウンドとして暗号化を行う(暗号の鍵長によって変換のラウンド数[※1]が異なる)

2~5の処理がいまいち分からず。ゆくゆく調べます。

[※1]ラウンド数

  • 鍵長128ビット:ラウンド数10回
  • 鍵長192ビット:ラウンド数12回
  • 鍵長256ビット:ラウンド数14回

※複合は、2~3を逆変換を逆順でする。

初心者にはこれが良さそうです。

www.atmarkit.co.jp

プロセスメモリの使用量

メモ:Linuxで、2つのアプリケーションを同居する場合に、正常動作する仕様か?を調査した時のメモ

確認したのは下記2点。このページはメモリについて書きました。

  • メモリが足りるか?
  • プロセス名やポートがぶつからないか?

特定のプロセスのメモリ使用量の確認

アプリケーションのプロセスのメモリ使用量を調べます。

ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  58572 19024 ?        Ss    4月13  10:14 /usr/lib/systemd/systemd --switched-root --system -
              <--全てのプロセスが表示されるので長い-->

上記のプロセス(PID=1)では、仮想メモリサイズ「58572KB」、物理メモリサイズ「19024KB」と読める。

# 特定のプロセスメモリを確認する場合
ps aux | grep [プロセス名]

そもそも「aux」って?

auxはpsコマンドのオプションを3つ合わせたもの。

  • a:端末操作のプロセスを表示する
  • u:CPUやメモリの使用率などを表示する
  • x:端末操作以外のプロセスを表示する

auxで確認できる項目

auxでプロセスの何が確認できるのでしょうか?

項目 説明 備考
USER プロセスを所有しているユーザ名
PID 一意のプロセスID
%CPU プロセスのCPU使用率(%) プロセスの実行時間 / CPU使用時間
%MEM プロセスが確保している物理メモリ量
VSZ 仮想メモリサイズ(KB)
RSS 使用中の物理メモリサイズ(KB)
TTY 制御端末の種類及び番号
STAT プロセスのステータス S:割り込み可能なスリープ状態
s:セッションリーダ
D:割り込み不可能なスリープ状態
R:実行可能状態(待ち状態)
O:実行中
I:プロセス生成中
Z:親プロセスとの関係が切れた状態(ゾンビプロセス)
N:優先度低い
>:優先度高い
+:フォアグラウンドのプロセスグループに入っている
T:停止中
START プロセスを起動した時間
TIME 累積したCPU時間 プロセスが使用した全CPU時間 +
プロセスのためにカーネルが使用した全CPU時間
COMMAND プロセスのコマンド名

VSZとRSSの違いがはっきりしない・・・

  • VSZ:プロセスが確保している仮想メモリサイズ(プロセス起動時に確保される)
  • RSS:プロセスが確保している物理メモリサイズ

この違いを理解するには、下記URLが良さそうです。

Linux/メモリ確保とVSZとRSS - discypus

プロセスのVSZ,RSSとfree,meminfoを実機で確認 - のぴぴのメモ

PostgreSQLプロセスのメモリ使用量の確認

このアプリケーションはpostgreSQLを使用しているのですが、メモリ使用量の確認で留意点がありました。 別途、まとめます。

Windows イベント

個人メモ:製品検証で、Windowsイベントエラーを検知して、アラート通知できるか確認した時のメモ

Windowsイベントとは?

  • Windowsが起動すると、システム、セキュリティ、アプリケーションなどが動作します。
  • Windowsが起動すると、上記イベント(動作)ログの収集を自動的に開始します。
  • イベントログでは、ログレベル(ノーマル・エラー・ワーニング)が分かります。

イベントログの種類

  • システムログ(Windows自身の動作ログ)
  • アプリケーション(Windows上で動作するアプリケーションソフトの動作ログ)
  • セキュリティ(セキュリティ監査ログ)
  • Setup(セットアップ関連の情報)

参考URL:https://msdn.microsoft.com/ja-jp/library/cc338067.aspx

Windowsイベントログの確認方法

  • Windowsが自動で収集したイベントログは、イベントビューアーで確認できます。
  • Windowsの[コントロールパネル]-[システムとセキュリティ]-[管理ツール]-[イベントビューアー]で確認します。 f:id:kodomonosora:20181025142501p:plain f:id:kodomonosora:20181025142617p:plain

Windowsログで確認できる項目

  • Application
  • セキュリティ
  • SetUp
  • システム
  • 転送されたイベント

Windowsイベントエラーの発生方法

簡単なのは、コマンドプロンプトでEVENTCREATEコマンドを実行する方法です。

EVENTCREATE /ID 900 /L application /SO app_test /T WARNING /D "WARNINGイベントのログテストです。"
EVENTCREATE /ID 901 /L application /SO app_test /T ERROR /D "ERRORイベントのログテストです。"
EVENTCREATE /ID 902 /L application /SO app_test /T INFORMATION /D "INFORMATIONイベントのログテストです。"

イベントビューアーを確認します。 f:id:kodomonosora:20181025154042p:plain

イベントビューアーの読み方

イベントログには属性があります。

属性 説明
ログの名前 イベントログの種類 Application
イベントID イベントログを発生したイベントID 901
ソース イベントログの発生元 app_test
レベル イベントログのレベル エラー

夢と恩

息子の夢は海外でプレーするサッカー選手になること

同じ夢を見る人はたくさんいると思います。
そして、息子よりもサッカーが断然上手な子がこの夢を諦めていると思います。

現に、同じサッカーチームで1,2位を争う上手な子は、強豪クラブチームのセレクションを受けて、差がありすぎると実感して諦めたと、その子のお母さんから聞きました。
そして、「コーチに中学の試合も出させてもらっているので、(今のクラブチームに)恩も感じるみたいで。コーチのことも好きだし。」と話してくれました。

私は即座に思った。(口にしなかったけど)

恩でクラブチーム選ぶの?

自分の息子は、最近は、中学生の試合には招集されません。
確かに、毎回のように中学生の試合に招集されるなら、子供は恩を感じるかもしれない。

でも、正直息子のサッカーチームは、そこまで強くはありません。
もちろんチームが強くなければ、プロサッカー選手になれるわけではないけど、このチームで中学3年間頑張れば、どうなれるか?というのがはっきりしていないです。 ただの習い事、趣味、部活の代わりでサッカーをやるなら十分満足するでしょう。

これから身体が大きく成長していく貴重な3年間でのサッカーの時間を軽く考えられないからこそ。
恩を感じているだけの理由で今のチームに残り、チャンスあるクラブチームに行かない、探さない、というのは私の選択肢にはないかな。

諦めるの早くない?

12歳の息子は8年後のワールドカップが頭にあるようです。
でもどう頑張ればよいかが具体的に頭になさそう。
8年で、私も子供もどれだけのことが出来るだろう。
プロになる確率は、チャレンジを辞めたら0%、チャレンジすれば数%。
まだ諦める時期ではないと思います。