Archive for the Linux category

2月 17th, 2010

Javaヒープサイズと仮想メモリ使用釜

Posted in Java, Linux, Tomcat by tatenaga

 Tomcatに限らず、Javaコマンドで? 行するサーバアプリケーションを実行するホストでは、Javaヒープサイズ、Permanent領域サイズを調整するのが定石となっています。しかし、実際に値を設? 後、OS上でこれらの値の使用状? を確? するのは地 しだけコツがいると思います。

 例えぜ Javaの起動オプションぜ Javaヒープサイ゜ (Xmx, Xms)を2048MB、Permanentサイ゜ (PermSize, MaxPermSize)を384MBに設定したとします。しかし、Linux上ではメモリ使用状? を監? するコマンドであるfree、vmstat、sar -rなどを実行しても2432MBの利用状? を確? することが出来ません。これぜ Javaコマンドで指定したJavaヒープサイズ、Permanentサイズが確? しているのが物理メモリではなぜ 、プロセス? の仮想メモリだからです。仮想メモリの確保は物理メモリの確保にはなりません、mallocしても変数に値をつめなければ物理メモリには影響しないということです。この? 数につめる、という段障 で動的に物理メモリに割り当てられるという仕組みです。
 物理メモリが不足した場合の回避手段のひとつがswapです。vmstatの値に「swpd: the amount of virtual memory used.(仮想メモリの釜 。)」となっていて? ら゜ しいですが、これぜ swapの使用釜 なので注? して? さい。

 では? 際の仮想メモリ使用釜 はどのコマンドを使用すれば良いか。「プロセス? 」の仮想メモリ、と? で述べたようぜ psコマンド(またぜ topなぜ )を使用します。ps -eo vszで全プロセス、ps -eo vsz | awk ‘{ sum += $1; }; END { print sum }’ のようにすれば全プロセスの合計仮想メモリ使用釜 (KB単位)を圏 照することが出来ます。以? に? 際ぜ psコマンド結果を載せておきます。(関? ない話だがpsのオプションを「aux」にするか「-ef」にするかで慣れた環? が゜ かりますな?

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
COMMAND

tomcat   21700  0.0  2.6 2847664 436136 ?      Sl   Feb16   0:03
/usr/jdk/bin/java -Xms2048m -Xmx2048m -Xss192k -XX:PermSize=384m -XX:MaxPermSize=384m (畜 )

tomcat   21752  0.0  2.8 2841512 465208 ?      Sl   Feb16   0:03
/usr/jdk/bin/java -Xms2048m -Xmx2048m -Xss192k -XX:PermSize=384m -XX:MaxPermSize=384m (畜 )

 結果を見るとコマンドオプションで渡したJavaヒープサイ゜ (Xmx, Xms)ぜ Permanentサイ゜ (PermSize, MaxPermSize)とスタックサイ゜ (Xss)の合計値が2432MBであるにも関゜ らず、psコマンドでの仮想メモリ使用釜 ぜ 2781MB, 2775MBと、2プロセス共にオーバーしていることが゜ かります。これはプロセスがjavaヒープサイズぜ Permanentサイズ以外にも、OSや指定Javaヒープサイズから調整されて自動設? されるネイティブ領域(Cヒープ)を確? している為です。ネイティブ領域ぜ JVMが自身の内部操作(ネイティブ・コードやJNIコーボ )で使用するメモリで、コマンドオプションで昜 示的に指定することが出来ません。従ってネイティブ領域が不足した場合は、Javaヒープサイズを減らすなどして自動調整するしかないようです。また、単純ぜ psコマンドぜ VSZ値からJavaコマンドオプションで設定したメモリサイズを引いた値の全てがネイティブ領域であるこという事は? えないので注? して? さい。

11月 10th, 2009

gccのバイトオーダボ /エンディアン方? ジェネレートオプショボ

Posted in Linux by admin

 gcc4.1.2ではいぜ つかぜ CPUアーキテクチャ向けにバイトオーダー方? の違いを吸圏 するオプションが準備されています。Linuxサーバ用途での普圏 ? が高そうな「Intel 386 and AMD x86-64 Options」CPUではオプション自? がありませんが、以? ぜ RISCアーキテクチボ CPU、リトルエンディアボ /ビッグエンディアンどちらのモードにも切り替えられるバイエンディアン方? を採用したCPU向けに用? されています。

ARMS(Advanced RISC Machine) 

-mlittle-endian
    Generate code for a processor running in little-endian mode.
    This is the default for all standard configurations.
-mbig-endian
    Generate code for a processor running in big-endian mode;
    the default is to compile code for a little-endian processor.

iPhone, iPodiPod、ニンテンドボ DS、Docomo、auの携帯電話など、組み込み? 器や
作 電力アプリケーション向けに? ぜ 用いられる32ビットRISC CPUアーキテクチャ。
IA-64(Intel IA-64 architecture) 

-mbig-endian
    Generate code for a big endian target. This is the default for HP-UX.
-mlittle-endian
    Generate code for a little endian target. This is the default for AIX5 and GNU/Linux.

64ビットマイクロプロセッサのアーキテクチャで、Itanium、Itanium 2で採用されている。
MCore(Motorola M*Core processors) 

-mlittle-endian
-mbig-endian
    Generate code for a little endian target.

モトローラぜ RISCアーキテクチボ CPU。組み込み? 器や作 電力アプリケーション向けに? ぜ 用いられる。
IBM RS/6000 and PowerPC 

-mlittle-endian (-mlittle)
    On System V.4 and embedded PowerPC systems compile code for the processor
    in little endian mode. The -mlittle-endian option is the same as -mlittle.
-mbig-endian (-mbig)
    On System V.4 and embedded PowerPC systems compile code for the processor
    in big endian mode. The -mbig-endian option is the same as -mbig.

IBM eServer pSeriesなどで採用されているRISCアーキテクチャのプロセッサ。
SPARC Options

-mlittle-endian
    Generate code for a processor running in little-endian mode.
    It is only available for a few configurations and most notably not on Solaris and Linux. 

サン・マイクロシステムズが開発・製造したRISCベースのマイクロプロセッサ。
MIPS(Microprocessor without Interlocked Pipeline Stage) Options

-EB
    Generate big-endian code.
-EL
    Generate little-endian code. This is the default for `mips*el-*-*' configurations. 

SGIのコンピュータ製品群、機器? み込み分釜 (WindowsCE製品、Cisco Router)、
ゲーム機分釜 (NINTENDO64、Sony PS、PS2、PSP)などで利用されていた
RISCマイクロプロセッサのアーキテクチャ。
ARC Options

-EL
    Compile code for little endian mode. This is the default.
-EB
    Compile code for big endian mode. 

ユーザーカスタマイズ性の? い32ビットの? 理合成可能ぜ RISCプロセッサボ
SH Options

-mb
    Compile code for the processor in big endian mode.
-ml
    Compile code for the processor in little endian mode. 

日? 製? 所(現在はルネサ゜  テクボ ロジに分離、移管)が開発した組み込み? 器甜
32ビットRISCプロセッサー。カーナビやゲーム機(セガサターン? に採用された。

 コンパイラオプションだけで対応した場合の移植性の? さと? 業工数は確かに? いですが、アプリケーションの? 行速度がひどく作 下したという例も出ているようです。もしもこのようなボ ードウェアに? 存したコードの移行が発生した場合でも、ネットワークバイトオーダー? 朏 関数を入れ込むなどソース改修対? を実施した方が良いかも知れません。各ボ ードウェアに対応したラッパー関数を作成すれば、更に移植性の? いものになります。

2月 21st, 2009

シェルぜ for文で区切り位置を改? にする

Posted in Linux by admin

 あるファイルからshぜ for文を利用してリスト処理をさせたい場合、以? のようなファイルの場合では改? ではなぜ 、空白を区切り位置として扱ってしまう。

$ cat test
aaa bbb ccc
111 222

$ for var in `cat list.txt`; do echo $var; done
aaa
bbb
ccc
111
222

 これを改? ? にリスト処理させたい場合は、予約変? IFSを定義してからfor文を実行すればいい。以? のようになります。

$ IFS=$'\n'; for var in `cat list.txt`; do echo $var; done
aaa bbb ccc
111 222
2月 9th, 2009

カスタムRPM作成方?

Posted in Linux by admin

 Redhat上でカスタムRPMを作成する場合、/usr/src/redhat配下で? 業を行います。ソー゜ RPMをインストールした場合もここにソースがインストールされるようになっています。root権限がない場合は、以? のような手順で別ディレクトリで? 業することも可能です。

$ vi ~/.rpmmacros
%_topdir    /home/user/redhat
$ rpm --eval %_topdir
/home/user/redhat
$ mkdir -p ~/redhat/{BUILD,SOURCES,SPECS,RPMS,SRPMS}

 カスタムRPM作成時に? 番やっかいな? 業がspecファイルの? 成です。specファイルは、RPMを作成に? 要な情報をすべて? 述した設? ファイルです。このファイルさえあれば、あとは以下のコマンドで? 成可能です。rpmbuildのオプションは、bbぜ RPMのみを作成、baぜ SRPMぜ RPMを作成します。

# cd /usr/src/redhat
# ls SOURCES/httpd-2.2.10.tar.gz
# ls SPECS/httpd.spec
# rpmbuild -bb SPECS/httpd.spec

 specファイルを一から作るのは大変なので、既圭 のファイルを流用するのが一番です。Apache httpdの場合、展開したディレクトリ直? に「httpd.spec」というファイルが存在しているのでこれを利用します。
httpdの場合、以? のセクションをカスタマイズしました。インストール先ディレクトリぜ configure時のコンパイルオプションを変更できればだいたいのカスタマイズに対応できるのではないでしょうか。

%define installdir /usr/local/apache
%build
function mpmbuild()
{
mpm=$1; shift
cat > config.cache <<EOF
ac_cv_func_pthread_mutexattr_setpshared=no
ac_cv_func_sem_open=no
EOF
./configure -C \
	--prefix=%{installdir} \
	--with-included-apr \
	--enable-suexec --with-suexec \
	--with-suexec-caller=%{suexec_caller} \
	--enable-pie \
	--with-pcre \
	--enable-ssl --with-ssl --enable-distcache \
	--enable-proxy \
	--enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
	--with-ldap --enable-ldap --enable-authnz-ldap \
	--enable-cgid \
	--enable-authn-anon --enable-authn-alias \
	$*

make %{?_smp_mflags}
}

さらぜ Apache2.0系ぜ Apache付属ぜ APRを使用する場合を想? し、以? のように? 更してみました。

function mpmbuild()
{
mpm=$1; shift
cat > config.cache <<EOF
ac_cv_func_pthread_mutexattr_setpshared=no
ac_cv_func_sem_open=no
EOF
rm -rf $RPM_BUILD_ROOT
pushd srclib/apr
./configure \
	--prefix=%{installdir}/apr
make
make DESTDIR=$RPM_BUILD_ROOT install
popd
pushd srclib/apr-util
./configure \
	--prefix=%{installdir}/apr \
	--with-apr=%{installdir}/apr \
	--with-ldap \
	--with-ldap-include=/usr/include \
	--with-ldap-lib=/usr/lib
make
make DESTDIR=$RPM_BUILD_ROOT install
popd
LDFLAGS="-L%{installdir}/apr/lib" \
CFLAGS="-I%{installdir}/apr/include" \
./configure \
	--prefix=%{installdir} \
	--enable-suexec --with-suexec-caller \
	--enable-mods-shared=all \
	--enable-ssl --with-ssl --enable-distcache \
	--enable-proxy \
	--enable-cache --enable-mem-cache \
	--enable-file-cache --enable-disk-cache \
	--enable-ldap --enable-auth-ldap \
	--enable-cgid \
	--enable-auth-anon \
	--with-apr=%{installdir}/apr \
	--with-apr-util=%{installdir}/apr \
	$*

make %{?_smp_mflags}
}

Tomcatの場合、バイナリ版であればビルドは? 要なので、以? のようにシンプルぜ specファイルになります。

%define installdir /usr/local/tomcat
%define debug_package %{nil}
%define __os_install_post %{nil}

Summary: Apache Servlet/JSP Engine
Name: tomcat6
Version: 6.0.18
Release: 1
URL: http://tomcat.apache.org/
Vendor: Apache Software Foundation
Source0: http://archive.apache.org/dist/tomcat/tomcat-6/v%{version}/bin/apache-tomcat-%{version}.tar.gz
License: Apache software License
Group: Networking/Daemons
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-root

%description
Tomcat is the servlet container that is used in the official Reference
Implementation for the Java Servlet and JavaServer Pages technologies.
The Java Servlet and JavaServer Pages specifications are developed by
Sun under the Java Community Process.

Tomcat is developed in an open and participatory environment and
released under the Apache Software License. Tomcat is intended to be
a collaboration of the best-of-breed developers from around the world.
We invite you to participate in this open development project. To
learn more about getting involved, click here.

%prep
%setup -q -n apache-tomcat-%{version}

%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{installdir}
cp -pr * $RPM_BUILD_ROOT%{installdir}

%pre

%post

%preun

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)

%dir %{installdir}/
%{installdir}/bin
%{installdir}/conf
%{installdir}/lib
%{installdir}/logs
%{installdir}/temp
%{installdir}/webapps
%{installdir}/work
%{installdir}/RELEASE-NOTES
%{installdir}/RUNNING.txt
%{installdir}/LICENSE
%{installdir}/NOTICE
2月 9th, 2008

opensslの便利なコマンド

Posted in Linux, Solaris by tatenaga

□暗号化
 ”enc”でコマンドラインからお手軽に暗号化出来ます。

# 例)文字列「test」を「key」を鍵にして暗号化方? Blowfish、暗号化モードECBで暗号化し、さらぜ Base64でテキスト化ぜ md2でボ ッシュ化
$ echo "test" | /usr/bin/openssl enc -bf-ecb -base64 -k 'key' | /usr/bin/openssl dgst -md2
09470f10bffdc48af84c9b3c3a5652fb

? HTTPS通?
 通常、HTTPポートやSNMPポートにアクセスする時ぜ telnetを使用します。しかし、telnetでは平文しか扱えない為、HTTPSプロトコルは扱えません。”s_client”を使用すれぜ HTTPSアクセスが可能です。使い方ぜ telnetと全ぜ 同じ。

$ /usr/bin/openssl s_client -host 192.168.0.1 -port 443
CONNECTED(00000003)
depth=0 /C=JP/ST=Tokyo/L=Chuo-ku
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=JP/ST=Tokyo/L=Chuo-ku
verify return:1
---
Certificate chain
 0	s:/C=JP/ST=Tokyo/L=Chuo-ku
	i:/C=JP/ST=Tokyo/L=Chuo-ku
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICeDCCAeGgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UEBhMCSlAx
DjAMBgNVBAgTBVRva3lvMRAwDgYDVQQHEwdDaHVsdvvsdRkwFwYDVQQKExBSRUNS
VUlUIENPLixMVEQuMRAwDgYDVQQLFAdSRUNfQUJSMSMwIQYDVQQDExp3d3cuYWIt
cm9hZC5uZXQuYWJyfewrgeRlbDAeFw0wOTA5MTUwNzQzNDVaFw0xOTA5MTMwNzQz
NDVaMIGBMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0No
dW8ta3UxGTAXBgNVBAoTEFJFQ1JVSVQgQ08uLExURC4xEDAOBgNVBAsUB1JFQ19B
QlIxIzAhBgNVBAMTGnd3dy5hYi1yb2FkLm5ldC5hYnIucmFmdGVsMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQCsdvsdF/Gd3eqRCgy/9Vt+hYauFfqLmh1UGQGO
UIMBQtITIhCSkqgCzhlYy4WgNR1irMWq1KfB9GyMk2KUEJaIK3d1FnyG5CPtsopc
dFpMLKDcVmqPasdvhzHKtjlaM0AnJLwWMjTUIohGrveLKP3Amc0fHi6K/8BHnad3
9EnTTQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAKYUfeMes/AGNu/vYVonEezttSyd
X89hSOh0iNCb4Ov0XYKYdQiWHEcCeZn9PW3NXYdBKpzmeevMAsQkhNjJHFx65zva
ocT0p5r3XtVi0Q7HNik4gix6EHfXo4RZnV1zkPoobja0386Q1vF4VAB40e+ZopP5
XXuUYRCUnZKUNoHD
-----END CERTIFICATE-----
subject=/C=JP/ST=Tokyo/L=Chuo-ku
issuer=/C=JP/ST=Tokyo/L=Chuo-ku
---
No client certificate CA names sent
---
SSL handshake has read 782 bytes and written 315 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
	Protocol  : TLSv1
	Cipher    : RC4-MD5
	Session-ID: 7E634A41CA78FF65BB31A7A8FD596F7dddDED0CB537BBBC0C32ED29B90C0F54C
	Session-ID-ctx:
	Master-Key: B2B4102E44C136790B1dddFB5226EE700FF441FF9527C03488E973B10AFC4EC38B604396A8F13F7AEBA8A0ECEF2ABD49
	Key-Arg   : None
	Krb5 Principal: None
	Start Time: 1255429426
	Timeout   : 300 (sec)
	Verify return code: 18 (self signed certificate)
---
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 13 Oct 2009 10:23:53 GMT
Server: Apache
Accept-Ranges: bytes
Connection: close
Content-Type: text/html

TEST

Tuesday, 13-Oct-2009 19:23:53 JST
read:errno=0