WAS에서 memcached(11211)에 연결되는 모든 connection tcpdump 뜨기 - 예제



exec `netstat -anp | grep 11211 | awk '{print $5'} | awk -F':' '{print $1}' | sort | uniq | awk 'BEGIN{x=""}{x = x" or "$1}END{print x}' | sed -e"s/^ or //g" | awk '{print "sudo /usr/sbin/tcpdump -nn src "$0" or dst "$0" -w tcpdump.txt"}'`



tcpdump의 -nn 옵션을 사용하면 dns lookup을 하지 않음

tcpdump의 -B 4096 옵션을 사용하면 버퍼 크기를 지정할 수 있음

Posted by '김용환'
,


cent os 6 장비에서 cpu 부하는 오르는데. load avg는 떨어지는 기현상이 있어서 확인하니..

이미 알려져 있는 이슈인듯 하다.


http://serverfault.com/questions/589078/cpu-100-idle-but-still-showing-load-average


https://www.centos.org/forums/viewtopic.php?t=1525


 부하는 존재하는데, 수치값은 떨어지는 경우이다. 

Centos7 테스트 중.. 


예)

top - 16:31:39 up 247 days, 20:02,  1 user,  load average: 0.00, 0.00, 0.04

Tasks: 185 total,   1 running, 184 sleeping,   0 stopped,   0 zombie

Cpu(s): 12.5%us,  2.3%sy,  0.0%ni, 84.8%id,  0.0%wa,  0.0%hi,  0.4%si,  0.0%st

Mem:  16290032k total, 10333348k used,  5956684k free,   142232k buffers

Swap: 10485752k total,    47260k used, 10438492k free,  2984700k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

12254 deploy    20   0 11.6g 4.9g  24m S 95.1 31.7  30:23.64 java

Posted by '김용환'
,



<현상>

line 19: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory  출력과 동시에 배포가 실패되는 사례 공유


<원인분석>


-  iterm 기본 설정이 로컬 맥의 설정을 자동으로 서버를 들고 감



$ ssh ip접속

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory



  기본에는 ko_KR.UTF-8인데, LANG의 값을 안들고 가면서 en_us.UTF-8로 변경되면서 LC_CTYPE 이슈 발생

$ locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory

locale: Cannot set LC_ALL to default locale: No such file or directory

LANG=en_US.UTF-8

LC_CTYPE=UTF-8

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=



- 배포시,  mv하면서 파라미터가 씹히는(?) 현상 발견하면서 배포 실패 (centos 7 계열만) 


 


<해결>

- 배포 툴에서 로컬의 LANG 환경 변수가 어떤 값인지 상관없이 export 로 해결하려고 했으나, 동작되지 않음

.bashrc 또는 .bash_profile 설정에 export LANG="ko_KR.UTF-8"로 변경으로 shell 접근, 배포 동작 잘 됨




Posted by '김용환'
,

리눅스 장비에서 cpu가 무슨 architecture인지, 몇 개인지, model name은 무엇인지, 소켓당 core는 몇개인지...  등에 대한 정보는 다음을 활용한다.



$ lscpu

Architecture:          x86_64

CPU op-mode(s):        32-bit, 64-bit

Byte Order:            Little Endian

CPU(s):                8

On-line CPU(s) list:   0-7

Thread(s) per core:    2

Core(s) per socket:    4

Socket(s):             1

NUMA node(s):          1

Vendor ID:             GenuineIntel

CPU family:            6

Model:                 60

Stepping:              3

CPU MHz:               3400.265

BogoMIPS:              6800.53

Virtualization:        VT-x

L1d cache:             32K

L1i cache:             32K

L2 cache:              256K

L3 cache:              8192K

NUMA node0 CPU(s):     0-7



$ cat /proc/cpuinfo

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 60

model name : Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz

stepping : 3

cpu MHz : 3400.265

cache size : 8192 KB

physical id : 0

siblings : 8

core id : 0

cpu cores : 4

apicid : 0

initial apicid : 0

fpu : yes

fpu_exception : yes

cpuid level : 13

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm

bogomips : 6800.53

clflush size : 64

cache_alignment : 64

address sizes : 39 bits physical, 48 bits virtual

power management:

....


Posted by '김용환'
,

ubuntu 리눅스에 jdk 


$ sudo apt-get update


$ sudo apt-get install alien


$ wget http://file.google.com/jdk-8u25-linux-x64.rpm


$ sudo alien -c jdk-8u25-linux-x64.rpm

jdk1.8.0-25_1.8.025-1_amd64.deb generated


$ sudo dpkg -i jdk1.8.0-25_1.8.025-1_amd64.deb


$ which java

/usr/bin/java


$ java -version

java version "1.8.0_25"

Posted by '김용환'
,


로그를 분석할 때 시간 대별로 특정 로그가 있는지를 체크하기 위해서 seq와 pipe와 grep를 사용하는 경우가 있다. 테스트를 하다가 특이한 점을 발견했는데, 아래 코드는 작동이 되지 않는다. grep안에 single quotation(')을 사용하는 경우에는 seq가 작동하지 않는다. 



$ for i in {30..59} ; do  echo ${i} | grep 'exceed' talk.log | grep '11-10 21:${i}:' ; done




그러나 grep 안에 double quotation(")을 사용하면 잘 동작한다. grep은 double quotation이 제맛... 



$ for i in {30..59} ; do  echo ${i} | grep "exceed" talk.log | grep "11-10 21:${i}:" ; done

Posted by '김용환'
,

awk에서 서버 환경 변수를 읽어오는 부분을 잘 몰라서 좀 헤맸다.

콘트롤러 서버에서 수집이 되어야 하는 서버군에 cpu 정보를 읽어오라는 ad-hoc 명령을 내리고 싶을 때 hostname도 같이 읽어와야 데이터 수집을 쉽게 할 수 있다. 


cpu 정보를 /proc/stat에서 읽어와서 awk에서 cpu 정보와 $HOSTNAME을 출력할 것이다.

awk안에 환경변수 HOSTNAME을 사용할 수 있는  두가지 방법이 있다.


1. { } 안에서 $HOSTNAME 을 사용할 때 "'" 으로 감싼다. (더블 쿼테이션 + 싱글 쿼테이션 + 더블 쿼테이션)


grep 'cpu ' /proc/stat | awk ' {usage=($2+$4)*100/($2+$4+$5)} END {print "'"$HOSTNAME "'" usage}'



2. { } 바깥에서 변수를 정의해서 사용하낟. 


 grep 'cpu ' /proc/stat | awk ' {usage=($2+$4)*100/($2+$4+$5)} END {print HOST " " usage}' HOST=$HOSTNAME


Posted by '김용환'
,


macos에서 불필요한 포트를 잡고 있는 프로세스 발견하기 (lsof 이용)



$ sudo lsof -i -n -P | grep TCP

......


$ sudo lsof -i -n -P | grep TCP | grep 8888

NPI3GDaem    90           root    3u  IPv4 0x928ae536e81f2635      0t0    TCP *:8888 (LISTEN)




--------------------


아니면.


$ sudo lsof -i:8888

Password:

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME

NPI3GDaem  91 root    3u  IPv4 0x76d3628514437dc9      0t0  TCP *:ddi-tcp-1 (LISTEN)

Posted by '김용환'
,



seq를 이용하여 서버목록에 ssh 명령 실행하기 - 예제


#!/bin/sh


for i in $(seq -f "%03g" 140 179)

do

  ssh www@indigo$i.itl.google.com "hostname; /sbin/sysctl net.ipv4.ip_local_port_range "

done


Posted by '김용환'
,

'

가끔 가다가 curl로 모니터링을 위해 해당 숫자의 값을 받고 처리를 하는 로직에서 변수의 값이 숫자로 변환이 안되는 경우가 발생할 수 있다. bash는 no type이나 공백이 있으면 숫자가 포함되어도 arithmetic 을 할 수 있도록 지원하지 않는다. 


activeThreadCount=`curl -s http://www.google.com/activeThreadCount`

declare -i activeThreadCount

if [[ $activeThreadCount -gt $THRESHOLD ]]; then  # 이곳에서 에러 발생

  echo "dump"

else

  echo "no loger dump"

  exit -1

fi


자세히 보면 "5"가 아니라 스페이가 들어간 "5 " 가 들어가서 number 처리가 되지 않았다. 

((: 8 -gt 5 : syntax error in expression (error token is "5 ")


삽집을 피하기 위해서 length을 얻어보고 tr로 trim을 해보는 것도 좋은 듯 하다. (trim() 함수를 늘 만들어서 쓰는 것도 좋을듯 하다. 과거에는 늘 이렇게 작업했는데. 이제는 기억도 안나..ㅠㅠ)



tc=`curl -s http://www.google.com/activeThreadCount`

echo "length: ${#tc}"

activeThreadCount=`echo $tc | tr -d ' '`


if [[ $activeThreadCount -gt $THRESHOLD ]]; then

  echo "dump"

else

  echo "no loger dump"

  exit -1

fi


Posted by '김용환'
,