24 Ağustos 2018 Cuma

/etc/security/limits.conf dosyası

Giriş
ulimit ile verilen değerleri kalıcı yapmak için bu dosya düzenlenir.

Örnek
Tüm kullanıcılar için şöyle yaparız
* soft nofile 4096
* hard nofile 4096
Örnek
someuser için softlink sayısını değiştirmek için şöyle yaparız.
#<domain>        <type>  <item>    <value>

# adjust these values as needed:
someuser          soft    nofile    4096
someuser          hard    nofile    8192
Örnek
oracke kullanıcı yani Oracle veri tabanının softlink sayısını değiştirmek için şöyle yaparız
oracle soft nofile 4096

ulimit komutu

Giriş
ulimit komutu genellikle login shell dosyası olan /etc/profile dosyasına yazılır. Tüm alanları gösteren çıktı şöyledir
[root@jboss02 ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 72192
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 72192
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

max user processes Alanı
Kullanıcının kaç tane process/thread açabileceğini gösterir. Eğer üst sınır aşılırsa, örneğin yeni bir thread yaratılamazsa, Java'da şu hatayı alırız.
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

-a seçeneği
Şöyle yaparız
ulimit -aH
Tüm atanmış değerleri gösterir.

-c seçeneği - core dosyası
Eğer core dump üretme yeteneği kapalı ise şuna benzer bir hata alırız.
Failed to write core dump. Core dumps have been disabled. To enable core dumping, try ulimit -c unlimited before starting Java again
Üretilen core dosyası için kullanılacak büyüklüğü belirtir.
Örnek
core dosyası üretilmesin istiyorsak şöyle yaparız.
ulimit -c 0
Örnek
Şöyle yaparız.
ulimit -c unlimited
Örnek
core dosyasında kullanılacak örüntü için şöyle yaparız.
sysctl -w kernel.core_pattern='/var/core/%e.%p.%h.%t.core'
Örnek
Şöyle yaparız.
#!/bin/sh
#
# Starts the application.
#
NAME=my_app
test -x /usr/bin/my_app || exit 0

start() {
  echo -n "Starting my app "

  sysctl -w kernel.core_pattern='/var/core/%e.%p.%h.%t.core'
  ulimit -c unlimited
  $NAME > /dev/null 2>&1 &
  echo "OK"

}
-H seçeneği - hard link
Şöyle yaparız.
ulimit -Hn 1048576
-l seçeneği
Belirtilen alanı sorgular. Şöyle yaparız.
ulimit -c -l
Çıktı olarak şunu alırız.
core file size          (blocks, -c) unlimited
max locked memory       (kbytes, -l) 64
-T seçeneği - thread
Uygulamanın kullanabileceği thread sayısı ayarlanabilir.

-S seçeneği - soft link
Örnek
Değiştirmek için şöyle yaparız.
$ ulimit -Su 2000

$ ulimit -a | grep processes
max user processes (-u) 2000
Örnek
Şöyle yaparız.
ulimit -Sn 1048576
-s seçeneği - stack
"ulimit -s" komutuyla da uygulamanın en fazla ne kadar stack (kilobyte cinsinden) kullanabileceği  ayarlanabilir.

bash kodlama - function tanımlama

Functio İsmi
Açıklaması şöyle. Çoğu programlama dili ile aynı özellikleri taşıyor.
name   A word consisting only of alphanumeric characters and
       underscores, and beginning with an alphabetic character
       or an underscore.  Also referred to as an identifier.
Ancak çoğu Linux dağıtımında çok daha farklı function isimleri kullanılabiliyor ve çalışyor. Şöyle yaparız.Function'ı çağırmak için ismini yazmak yeterli.  myfunction () şeklinde çağırmaya gerek yok.  Çıktı olarak abc::def alırız.
#!/bin/bash
function abc::def() {
    echo "${FUNCNAME[0]}"
}
abc::def
Function Kelimesi Olmadan
Parametre almasa bile parantez gerekir. 
Örnek
Şöyle yaparız
#!/bin/bash
die() {
    echo 'error: mandatory conditions not met!' >&2
    exit 1
}
value=$1
(( value > 0 )) && echo "$value > 0" || die;
(( value > 1 )) && echo "$value > 1" || die;
(( value > 2 )) && echo "$value > 2" || die;
(( value > 3 )) && echo "$value > 3" || die;
Örnek
Elimzide şöyle bir kod olsun.
do_something () {
    do it
}
Çağırmak için parantez kullanmaya gerek yok şöyle yaparız.
$ do_something () { echo 'do it'; } ; do_something
do it
Function Kelimesi İle 
Örnek
Şöyle yaparız.
function nevens {
  local sum=0
  for element in $@; do
    let evencheck=$(( element % 2 ))
    if [[ $evencheck -eq 0 ]]; then
      let sum=sum+1
    fi
  done
  echo $sum
}
Çağırmak için şöyle yaparız.
$ nevens 42 6 7 9 33
2
$ nevens 42 6 7 9 33 22
3
$ nevens {1..10..2} # 1 to 10 step 2 → odd numbers only
0
$ nevens {2..10..2} # 2 to 10 step 2 → five even numbers
5
Örnek
Şöyle yaparız.
function evencheck
{
  return $(( $1 % 2 ))
}
function nevens
{
  local -i sum=0
  for element
  do
    # `if` implicitly checks that the returned value/exit status is 0
    if evencheck "$element"
    then
      (( sum++ ))
    fi
  done
  echo "$sum"
}
Yerel Değişken Tanımlamak
Integer değişken tanımlamak için şöyle yaparız.
local -i sum=0