epsファイルのBoundingBoxを設定しても効果がないとき
epsの表示領域をBoundingBoxを利用して設定しても、反映されなかったときのメモ
eps
epsファイルは、画像データ形式ですが、その中身はPost Scriptで記述されたテキストファイルです。 というわかけで、メモ帳で編集することができます。その中でも、「BoundingBox」の設定項目はとても重要です。
BoundingBoxを設定しても効果がない
BoundingBoxを設定することで、画像の一部を表示させることができるのですが、
%%BoundingBox 10 20 30 40のように設定します。
しかし、epsファイルを編集しても、BoundingBoxを設定しても効果がありませんでした。
Trailerの後の部分を削除する
実は、epsファイルの最後の方に「%%Trailer」という部分があり、その後にも「%%BoundingBox」という記述が。ここで上書きされていたみたいです。というわけで、その部分を削除したら無事BoundingBoxの設定が反映されました。
JavaのOutOfMemoryErrorについて
メモリ不足によるJavaのエラーとその対策方法についてメモしておきます。
OutOfMemoryError
java.lang.OutOfMemoryErrorが発生するときの状況について。
私の場合は、Javaを実行してからだんだんと使用メモリが増加し、GCを繰り返しても増加し続け、
java.lang.OutOfMemoryError: Java heap spaceというエラーが表示されました。これは、JVMが確保するヒープサイズの最大値を使用メモリが超えたためです。
-Xmxオプションによる対策
手っ取り早い対策として、-Xmxオプションを利用する方法があります。たとえば、JVMのヒープサイズの最大値を1024MBにするためには、JVMの起動時(javaコマンド実行時)に、
-Xmx1024mというオプションを追加すればOKです。
eclipseを利用している場合は、Debug ConfigurationまたはRun ConfigurationのArgumentタブの「VM arguments」に「-Xmx1024m」を追加すればOKです。
おまけ1 manページ
javaコマンドのmanページ中の-Xmxオプションの項を掲載しておきます。
-Xmxn
Specify the maximum size, in bytes, of the memory allocation pool. This value must a multiple of 1024 greater than 2MB. Append the letter k or K to indicate kilobytes, or m or M to indicate megabytes. The default value is chosen at runtime based on system configuration. For more information, see HotSpot Ergonomics
Examples: -Xmx83886080 -Xmx81920k -Xmx80m
おまけ2 設定が大きすぎると
最大ヒープサイズを大きくしすぎると次のようなエラーが出ました、というメモ。
- Error occurred during initialization of VM. Could not reserve enough space for object heap.
- Could not create the Java virtual machine.
- Error occurred during initialization of VM. Could not reserve enough space for object heap
おまけ3 Javaのヒープメモリ管理の仕組み
ちょっと古いんですが、関連記事です。→ @IT 「第3回 Javaのヒープ・メモリ管理の仕組み(2005/4/2)」
Java並行処理プログラミング
Google App Engine for Java [実践]クラウドシステム構築
Effective Java 第2版
BINDインストールTIPS hosts.allow, hosts.deny 編
BINDをインストールする最中に気がついたことをインストールTIPSとして紹介します
hosts.allow, hosts.deny ファイル
BINDの動作をnslookupで確認しようとしたとき、
No response from serverと表示されてしまったので、アクセスすらできていないことから、「hosts.allow」「hosts.deny」が思い浮かびました。
結論から言うと
結論から言うと、「BINDに関してはhosts.allowファイルもhosts.denyファイルも関係ありません」ということです。
なぜ関係ないのか
そもそも、hosts.allow,hosts.denyは、TCP Wrapperを利用するプログラムの通信を制限する設定ファイルなので、TCP Wrapperを利用していないBINDの通信には何の関係もないのです。
hosts.allow, hosts.denyが関係するプログラムとは
ずばりhosts.allow, hosts.denyが関係してくるプログラムは、TCP Wrapperを利用しているプログラムのことです。そして、TCP Wrapperの実態はlibwwrapという共有ライブラリです。つまり、hosts.allow, hosts.denyで通信相手を制限できるのは、libwrapを利用しているプログラムのみということになります。
共有ライブラリの利用状況を調べるには
つまり、プログラムが共有ライブラリlibwrapを利用しているかどうかが分かれば、hosts.allow, hosts.denyを設定する必要があるかどうかが判断できるわけです。
そのためには、lddコマンドを利用します。 たとえば、代表的なhosts.allow, hosts.denyを利用するプログラムであるsshdについてlddコマンドを利用してみます。
すると、このようにsshdが利用しているライブラリの一覧を取得することができます。そして、この中に確かに「libwrap」があることが確認できます。よって、sshdはhosts.allow, hosts.denyの制御の影響を受けるわけです。$ ldd /usr/sbin/sshd libwrap.so.0 => /lib64/libwrap.so.0 (0x00002ae70961f000) libpam.so.0 => /lib64/libpam.so.0 (0x00002ae709828000) libdl.so.2 => /lib64/libdl.so.2 (0x00002ae709a33000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002ae709c38000) libaudit.so.0 => /lib64/libaudit.so.0 (0x00002ae709e50000) libfipscheck.so.1 => /usr/lib64/libfipscheck.so.1 (0x00002ae70a06a000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002ae70a26d000) libutil.so.1 => /lib64/libutil.so.1 (0x00002ae70a5be000) libz.so.1 => /usr/lib64/libz.so.1 (0x00002ae70a7c1000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00002ae70a9d6000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ae70abee000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002ae70ae26000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002ae70b03c000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002ae70b26a000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002ae70b4ff000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002ae70b725000) libnss3.so => /usr/lib64/libnss3.so (0x00002ae70b927000) libc.so.6 => /lib64/libc.so.6 (0x00002ae70bc52000) /lib64/ld-linux-x86-64.so.2 (0x00002ae709402000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002ae70bfaa000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002ae70c1f0000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002ae70c3f9000) libnssutil3.so => /usr/lib64/libnssutil3.so (0x00002ae70c5fb000) libplc4.so => /usr/lib64/libplc4.so (0x00002ae70c818000) libplds4.so => /usr/lib64/libplds4.so (0x00002ae70ca1d000) libnspr4.so => /usr/lib64/libnspr4.so (0x00002ae70cc20000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae70ce5a000)
BINDデーモンnamedについて確認する
では、BINDはどうかというと、
を見ての通り、libwrapがありません。つまり、BINDにhosts.allow, hosts.denyの設定は無意味という訳です。$ ldd /usr/sbin/named liblwres.so.9 => /usr/lib64/liblwres.so.9 (0x00002b819e041000) libdns.so.26 => /usr/lib64/libdns.so.26 (0x00002b819e252000) libbind9.so.0 => /usr/lib64/libbind9.so.0 (0x00002b819e573000) libisccfg.so.1 => /usr/lib64/libisccfg.so.1 (0x00002b819e77c000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002b819e996000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002b819ece7000) libisccc.so.0 => /usr/lib64/libisccc.so.0 (0x00002b819ef16000) libisc.so.15 => /usr/lib64/libisc.so.15 (0x00002b819f11e000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00002b819f360000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b819f579000) libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00002b819f794000) libc.so.6 => /lib64/libc.so.6 (0x00002b819f9cf000) libdl.so.2 => /lib64/libdl.so.2 (0x00002b819fd27000) libz.so.1 => /usr/lib64/libz.so.1 (0x00002b819ff2b000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002b81a013f000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002b81a03d5000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002b81a05fa000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002b81a07fc000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002b81a0a05000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002b81a0c07000) /lib64/ld-linux-x86-64.so.2 (0x00002b819de24000) libcap.so.1 => /lib64/libcap.so.1 (0x00002b81a0e1c000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002b81a1021000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002b81a1239000)
まとめ
今回のまとめはこんな感じ
- BINDに対するhost.allow, hosts.denyの設定は無意味
-
hosts.allow, hosts.denyがプログラムに対して有効かどうかを判定するためには
$ ldd (プログラム) | grep libwrap
としてみればよい
BIND導入記06 動作確認編
前回まででBINDの起動が終了しました。続いて、BIND正しく動作しているかの確認を行います。
動作確認環境
今回は、BINDサーバの動作確認をWindowsから行います。今回利用したのはWindows Vistaですが、ほかでもたいし変わりません。
DNSサーバの指定方法
DNSサーバは、DHCPを利用している環境では、プライベートIPアドレスの割り当てと同時に指定されるので、DNSサーバの指定を変更するためには、DHCPを行っているサーバもしくはブロードバンドルータの設定を変更します。
しかし、ルータの再起動が必要になるなど、動作確認で利用するにはめんどくさい方法です。
そこで今回は、特定のWindows PCのDNSサーバを直接指定することにします。
利用するDNSサーバを直接指定する
まず、コントロールパネルもしくはスタートから、「ネットワーク接続(コントロールパネル>ネットワークとインターネト>ネットワーク接続)」を開きます。そして、利用している回線(普通はローカルエリア接続もしくはワイヤレスネットワーク接続)を右クリックし、「状態」を表示します。状態表示の中の「プロパティ」をクリックし、プロパティを表示します。
続いて、「この接続は次の項目を使用します」の中から、「インターネット プロトコル バージョン4(TCP/IPv4)」を選択した状態で「プロパティ(R)」をクリックします。
「全般>次のDNSサーバーのアドレスを使う(E)」を選択して、「優先DNSサーバ」に、BINDをインストールしたサーバのIPアドレスを指定します。指定したらOKをクリックし、開いていたウィンドウを閉じて設定完了です。
この設定を戻すときは、「DNSサーバのアドレスを自動的に取得する」を選択し直せばOKです。
DNSキャッシュをフラッシュ(消去)する
動作確認をする前に、今までのDNSサーバの履歴があると問題解決に不都合が生じることがあるので、履歴(キャッシュ)を消去します。
コマンドプロンプトを右クリックで「管理者として実行」を選択して起動します。
起動したら、
>ipconfig /flushdnsを実行します。これで
DNS リゾルバ キャッシュは正常にフラッシュされました。と表示されれば、キャッシュが消去されたことになります。
登録したアドレスが取得できるか確認する
引き続きコマンドプロンプトを利用します。example.netに192.168.1.21というIPアドレスを登録していたとすると、コマンドプロンプトで、
>nslookup example.netを実行し、
サーバー: example.netと表示されればOKです。登録されていたIPアドレスを正しく取得できました。
Address: 192.168.1.21
名前: example.net
Address: 192.168.1.21
登録されていないアドレスが取得できるか確認する
登録したアドレスexample.net以外も取得できるはずなので、コマンドプロンプトで
>nslookup yahoo.co.jpを実行し、ただしくIPアドレスが返ってくることを確認してください。
結果
以上の動作確認が完了すれば、BINDサーバをとりあえず正しく設定できていることになります。
次回
ここまででインストール・設定・起動・動作確認までが終了しましたが、そうそううまくいきません。自分がそうでした。
そこで、BINDをインストールするに当たってつまづいたポイントを以降の記事で紹介しておこうと思います。
BIND9によるDNSサーバ構築
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集
DNS & BIND 第5版
BIND導入記05 起動編
前回までに、BINDの設定ファイルを作成し終えました。あとは起動するだけです。
namedの起動
BINDの実態は、「named」というデーモンです。これを起動するためには、
# /etc/rc.d/init.d/named startを実行すればOKです。
namedを起動中 [OK]となれば正常起動です。また、OSの起動時に自動的に実行するためには、
# chkconfig named onとすればOKです。
次回
次回は、動作確認編です。正しく動作しているかを確認します。
BIND9によるDNSサーバ構築
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集
DNS & BIND 第5版