리눅스용 실시간 모니터링 툴 netdata 간단 설치


# yum install -y zlib-devel gcc make git autoconf autogen automake pkgconfig


# git clone https://github.com/firehol/netdata.git –depth=1


# cd netdata


# ./netdata-installer.sh


설정파일은 /etc/netdata/netdata.conf


19999 포트오픈되고 웹페이지에서 확인가능

'job > open source' 카테고리의 다른 글

ansible 설명  (0) 2018.09.21
zimbra 오픈소스 웹메일 짐브라  (0) 2018.09.03

톰캣(java) 아웃오브메모리(java.lang.OutOfMemoryError: GC overhead limit exceeded)


해결 방법




대충 처리하자면 현재 사용중인 메모리중 여유 메모리 어느정도인지 확인해서 더 추가해주기


ㄴ그전에 프로그램상의 메모리 누수는 없는지 확인해야함, 이거는 개발단








 ps -ef | grep java 해서 Xmx 설정이 없으면 자바에 디폴트로 설정된 값으로 할당된 상태이니 아래 명령어를 통해 확인 가능


##아래는 java의 디폴트 사이즈 확인하는명령어 보통 heap사이즈는 실제 물리 메모리의 4분의1 이 할당되는듯


[root@localhost]# java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'


     intx CompilerThreadStackSize                   = 0                                   {pd product}


    uintx ErgoHeapSizeLimit                         = 0                                   {product}


    uintx HeapSizePerGCThread                       = 87241520                            {product}


    uintx InitialHeapSize                          := 257949696                           {product}


    uintx LargePageHeapSizeThreshold                = 134217728                           {product}


    uintx MaxHeapSize                              := 4116709376                          {product}


     intx ThreadStackSize                           = 1024                                {pd product}


     intx VMThreadStackSize                         = 1024                                {pd product}


####




####현재 java 메모리 어느 영역 사용중인지 찍는 로그


java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+DisableExplicitGC -Xloggc:/root/test.txt


ㄴ값이 항상 일정한것이.... 뭔가 찾아보면 있을꺼같은데 잘 모르겄다..이건 어디에 쓰이는지 더 확인해봐야함


####




카타리나.sh 에 추가 JAVA_OPTS="$JAVA_OPTS -Xms8192M -Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tomcat_oom_dump.txt"




근데 메모리 늘려줘도 oom 발생하면 덤프파일을 통해 분석을 해보자


카타리나.sh에 추가한 JAVA_OPTS 중 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tomcat_oom_dump.txt" 이부분이 oom 에러 발생할경우 덤프파일 생성하는거






덤프파일 pc로 옮기고 아래에서 분석툴 다운받기


http://www.eclipse.org/downloads/download.php?file=/mat/1.7/rcp/MemoryAnalyzer-1.7.0.20170613-win32.win32.x86_64.zip&mirror_id=1255






오픈 heap 파일 할때 java heap space 에러나면 덤프파일 분석시 사용되는 메모리가 부족해서 발생하는거다.


압축 푼 파일보면 memory analyzer.ini 파일 있는데 거기서 Xmx 값을 2048 혹은 4096으로 늘려준다.


8기가짜리 하는데 8000 주니까 된다. 그럼 pc 메모리가 부족하면 애초에 돌리질 못하냐 ? 아니다. 뭐 하는방법이 있다. 구글링해보면.

'job > was' 카테고리의 다른 글

tomcat ssl 인증서 설치  (0) 2018.08.31

고객 문의중 기존서버에서는 잘되던 sns 내보내기 기능이 새로 구입한 서버에서는 정상적으로 안된다고한다.


http://도메인/bbs/sns_send.php?longurl=http%3A%2F%2F도메인%2Fshop&title=sns=gplus




위와같은 주소로 연결이 되는데 서버로는 연결이 되는듯 하나 아파치 로그에는 찍히지 않는것으로 보아 아파치 문제는 아닌듯 하다.




bbs/sns_send.php 를 살펴보면




  5 $title    =  urlencode(str_replace('\"', '"',$_REQUEST['title']));


  6 $short_url = googl_short_url($_REQUEST['longurl']);


  7 if(!$short_url) {


  8         $short_url = $_REQUEST['longurl'];




위 내용중 6번 라인을 주석하면 정상적으로 작동된다는 글을 구글링을 통해 찾았다. 




실제로 6번 라인 주석하니 sns 내보내기 기능이 정상적으로 작동된다.




그럼 googl_short_url 이라는 함수가 정상적으로 작동되지 않는다는건데...




googl_short_url 이라는 함수 설정은 lib/common.lib.php 파일에 들어가 있다.




2761 // goo.gl 짧은 주소 만들기


2762 function googl_short_url($longUrl)


2763 {


2764     global $config;


2765 


2766     // Get API key from : http://code.google.com/apis/console/


2767     // URL Shortener API ON


2768     $apiKey = $config['cf_googl_shorturl_apikey'];


2769 


2770     $postData = array('longUrl' => $longUrl);




위와같이 




google.com 에서 API 키를 받아와야 한다.




도메인/adm 들어가서 환경설정의 SNS 쪽 확인해보면 구글 짧은주소 API KEY 등록하는부분이 있긴 하지만... 애초에 짧은 주소 기능을 사용 안하게 되면 위 함수와 현재 정상적으로 작동되지 않는 sns 내보기 기능과는 무관한듯 보인다...




결론은 구글링에서 찾은 6번라인 주석하면 해결된다는것은 임시방편(다른쪽에 에러가 있을 수도 있음)에 불과하다...




계속 테스트 해보니




https 로 넘어갈 때 정상적으로 작동을 하지 않는다.




소스 보면 curl 을 통해서 http 혹은 https 로 넘어가는데 .. 확인결과 구서버에는 curl 에 openssl 이 enable 돼 있으나 신 서버는 openssl 의 없다(cURL Information => libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2) 






########curl 재설치#######


상황


cent 5사용중이던 고객사가 cent 6 로 서버 이전




이전중 문제 발생, 원인은 curl 에 openssl 이 적용돼있지 않음




이번주에 위와 똑같은 문제인 고객사 1명 더 있었음


(이사람도 구서버는 잘돼는데 이번에 신서버(구서버 신서버 os 기억안남)


에서는 특정 기능이 안된다는 문의였음)






궁금한점


구서버와 신서버의 curl 달라진건가 ?


아니면  cent 5점대 6점대 버전차이 ?






curl 에 open ssl 기능이 포함돼 있찌 않으면 그 결제모듈? 이런거 통신할때


curl 에 openssl 기능 사용해야되서 문제 있을듯합니다. 




해결은




curl 다운받고 설치 


tar xvfz curl-7.49.0.tar.gz 


cd curl-7.49.0


./configure --prefix=/usr/local/curl


make && make install




기존 curl 백업


cd /usr/lib64


mkdir curl_backup


mv libcurl.so* curl_backup/


cp -a /usr/local/curl/lib/libcurl.* ./




아파치 재시작하면 curl 에 openssl 포함돼있음




##############




위와같이 curl 재설치 하면 


cURL Information => libcurl/7.49.0 OpenSSL/1.0.1e zlib/1.2.3 libidn/1.18openssl 들어가있음


##############


위 문제가 아니였다. 개삽질 했다.

localhost로 통신을 해야하는데 iptables로 제일 상단에 해외아이피 차단(!KR 제외한 모든 아이피 차단)을 걸어놨다. 그러면서 127.0.0.1 즉 로컬호스트도 차단이 된거다. 그래서 안됐던거임

iptables -A INPUT -m geoip  ! --source-country KR -j LOG --log-prefix "Input DROP : "




해당 정책으로 인해 차단되는 아이피들을 /var/log/messages 에서 확인할 수 있다.




iptables로 인해 차단되는 패킷을 메세지로그에 찍는거

'job > linux' 카테고리의 다른 글

vi 명령어 옵션  (0) 2018.08.31
libphp5.so: undefined symbol: unixd_config  (0) 2018.08.31
sar 명령어 옵션 설명  (0) 2018.08.31
dell / hp 서버 서비스 태그 확인하기  (0) 2018.08.31
sed 및 awk 사용법  (0) 2018.08.31

웹에다 파일 업로드해서 간단하게 바이러스 검사하는 웹 페이지




https://www.virustotal.com/#/home/upload


-b

I/O및 전송 속도 통계를 보고합니다. 다음 값이 표시됩니다.



tps

물리적 장치에 실행된 초당 총 전송 수입니다. 전송은 물리적 디바이스에 대한 I/O요청입니다. 다중 논리적 요청을 디바이스에 대한 단일 I/O요청으로 결합할 수 있습니다. 전송이 중간 크기입니다.


rtps

물리적 디바이스에 대해 실행된 초당 읽기 요청의 총 수입니다.


wtps

물리적 장치에 대해 실행된 초당 총 쓰기 요청 수입니다.


bread/s

초당 블록 단위로 디바이스에서 읽은 총 데이터 양입니다. 블록은 2.4커널 이상의 섹터와 동등하기 때문에 512바이트의 크기를 갖습니다. 이전 커널의 경우 블록의 크기가 불명확하다.


bwrtn/s

초당 블록으로 디바이스에 기록된 총 데이터 양입니다.

-B 

호출 통계를 보고합니다. 아래의 일부 메트릭은 포스트 2.5커널에서만 사용할 수 있습니다. 다음 값이 표시됩니다.




pgpgin/s

시스템이 디스크에서 초당 페이징 된 총 킬로바이트 수입니다. 참고:이전 커널(2.2. x)의 경우 이 값은 킬로바이트가 아닌 초당 블록 수입니다.



pgpgout/s

시스템이 초당 디스크로 경로 지정된 총 킬로바이트 수입니다. 참고:이전 커널(2.2. x)의 경우 이 값은 킬로바이트가 아닌 초당 블록 수입니다.


fault/s

초당 시스템에서 발생한 페이지 장애 수입니다. 일부 페이지 장애는 I/O없이 해결될 수 있기 때문에 I/O를 생성하는 페이지 장애의 수입니다.


majflt/s

디스크에서 메모리 페이지를 로드해야 하는 경우의 초당 시스템에 발생한 주요 결함 수입니다.


pgfree/s

초당 시스템에서 사용 가능한 목록에 배치한 페이지 수입니다.


pgscank/s

1초에 SCE대몬이 검색한 페이지 수.


pgscand/s

초당 직접 스캔한 페이지 수입니다.


pgsteal/s

메모리 요구를 충족하기 위해 시스템이 초당 캐시(페이지 캐시 및 스왑 캐시)에서 재확보한 페이지 수입니다.



%vmeff

pgsteal / pgscan으로 계산되는 이것은 페이지 회수 효율성의 지표입니다. 만일 이것이 거의 100%에 가까우면, 비활성 목록의 뒤에 나오는 거의 모든 페이지가 거두어 질 것이다. 메모리가 너무 낮으면(예:30%미만)가상 메모리에 약간의 문제가 있는 것입니다. 이 필드는 간격 동안 검색된 페이지가 없는 경우 0으로 표시됩니다.






델 서버  

omreport chassis info | grep 'Chassis Service Tag'



HP 서버
hpasmcli -s "show server"


출처 : http://ai.korea.ac.kr/~kaizer/unix/scripts.htm


sed [-e script][-f script-file][file...]


기본적인 기능은 ed에서 따 왔으며, 이 기능들은 모두 sed에 적용이 된다. 다만 ed는 대화형 편집기이며,

sed는 스트리밍 편집기이다. 대화형 편집기와 스트리밍 편집기의 차이점은 대화형 편집기는 입력 및 출력이

하나로 이루어지며, 스 트리밍 편집기는 하나의 입력이 하나의 출력을 낸다는 것이다.

\n 을 개행문자로 사용하는 스트리밍 에디터이다. 


찾기(search), 출력(print),

sed -n '/abd/p' list.txt : list.txt 파일을 한줄씩 읽으면서(-n : 읽은 것을 출력하지 않음) abd 문자를 찾으면 그 줄을 출력(p)한다.


치환(substitute),

sed 's/addrass/address/' list.txt : addrass를 address로 바꾼다. 단, 원본파일을 바꾸지 않고 출력을 바꿔서 한다.

sed 's/addrass/address/' list.txt > list2.txt

sed 's/\t/\ /' list.txt : 탭문자를 엔터로 변환

sed 's/□□*/□/' list.txt : ( *표시: □ 는 공백 문자를 표시한다. ) 위의 구문은 한개이상의 공백문자열을 하나의 공백으로 바꾼다.


추가(insert)

scriptfile - s/

삭제(delete)

sed '/TD/d' 1.html : TD 문자가 포함된 줄을 삭제하여 출력한다.

sed '/Src/!d' 1.html : Src 문자가 있는 줄만 지우지 않는다.

sed '1,2d' 1.html : 처음 1줄, 2줄을 지운다.

sed '/^$/d 1.html : 공백라인을 삭제하는 명령이다

파 일 이름만을 뽑아내는 정규식

s/^.*\/\([a-zA-Z0-9.]*\)".*$/\1/ : ^는 라인의 맨 처음, .* 아무문자열, \(, \)은 정규표현식을 그룹화, $ 는 라인의 맨 끝.

( s;^.*\/\([a-zA-Z0-9.]*\)".*$;\1;) \1는 그룹화된 첫번째 요소를 말한다.

[a-zA-Z0-9.] 는 알파벳과 숫자 및 .(콤마)를 표현하는 문자(character)를 말한다.

즉 GF02.jpg와 같은 문자열을 첫번째 그룹화하고 난 다음 라인 전체를 그룹화된 내용으로 바꾸는 것이다. 


/g : global을 의미 한줄에 대상문자가 여러개일 때도 처리하도록 한다.


who | sed -e 's; .*$;;' : 각 라인의 첫 번째 공백에서부터 마지막까지 삭제하라.


who | sed -e 's;^.* ;;' : 각 라인의 처음부터 맨 마지막 공백까지 삭제하라.


who | sed -e 's;^.*:;;' : 각 라인의 처음부터 : 문자가 있는 곳(:문자포함)까지 삭제하라. 


-n 옵션

sed는 항상 표준 출력에서 입력 받은 각 라인을 나타낸다는 것을 알아냈다. 그러나 때때로 한 파일로부터 몇 개의 라인들을 추출해 내기 위해 sed를 사용하기를 원할 때도 있다. 이러한 경우에 -n옵션을 사용한다. 이 옵션은 사용자가 만약 해야 할 일을 정확히 말해 주지 않는다면 임의의 라인을 프린트하는 것을 원하지 않는다고 sed에게 말한다. 따라서 p명령이 같이 쓰인다. 라인 번호와 라인 번호의 범위를 나타냄으로써 sed를 사용하여 텍스트의 라인들을 선택적으로 프린트할 수 있게 한다. 다음에서 볼 수 있는 바와 같이, 한 파일로부터 첫 번째 두 라인이 프린트되었다.


$ sed -n '1,2p' intro Just print the first 2 lines from intro file.


만약 라인 번호 대신에 슬래시로 에워 싸인 문자열과 함께 p명령이 쓰인다면 sed는 이들 문자들이 포함하고 있는 표준 입력을 통해서 라인들을 프린트하게 된다. 따라서 하나의 파일로부터 처음의 두 라인을 프린트하기 위하여 다음과 같이 사용될 수 있다.


$ sed -n '/UNIX/p' intro Just print lines containing UNIX

sed '5d' : 라인 5를 삭제

sed '/[Tt]est/d' : Test 또는 test를 포함하는 모든 라인들을 삭제

sed -n '20,25p' text : text로부터 20에서 25까지의 라인들만 프린트

sed '1,10s/unix/UNIX/g' intro : intro의 처음 10개의 라인들의 unix를 UNIX로 변경

sed '/jan/s/-1/-5' : jan을 포함하는 모든 라인들 위의 첫 번째 -1을 -5로 변경

sed 's/...//' data : 각 data라인으로부터 처음 세 개의 문자들을 삭제

sed 's/...$//' data : 각 데이터 라인으로부터 마지막 3문자들을 삭제

sed -n '1' text : 비 프린트 문자들을 \nn으로 (여기서 nn은 그 문자의 8진수 값임),

그 리고 탭 문자들을 > 로 나타내는 각 텍스트로부터의 모든 라인들을 프린트


awk 명령어


awk '/west/' datafile : west 라는 글이 있는 줄 출력

awk '/^north/' datafile : north로 시작하는 줄 출력

awk '/^(no | so)/' datafile : no 또는 so 로 시작하는 줄 출력

awk '{ print $3, $2 }' datafile : datafile 리스트의 세 번째 와 두 번째 필드를 스페이스로 띄어서 출력

awk '{ print $3 $2 }' datafile : datafile 리스트의 세 번째 와 두 번째 필드를 그냥 붙여서 출력 

awk '{ print "Number of fields : " NF} ' datafile : datafile의 각 줄마다의 필드수를 리턴한다.

awk '$5 ~ /\.[7-9]+/' datafile : 다섯 번째 필드가 마침표 다음엣 7과 9사이 숫자가 하나 이상 나오는 레코드 출력

awk '$2 !~ /E/ { print $1, $2 }' datafile : 두 번째 필드에 E 패턴이 없는 레코드의 첫 번째와 두 번째 필드 출력

awk '$3 ~ /^Joel/{ print $3 " is a nice guy."} ' datafile : 세 번째 필드가 Joel로 시작하면 " is a nice guy"와 함께 출력

awk '$8 ~ /[0-9][0-9]$/ { print $8 }' datafile : 여덟 번째 필드가 두 개의 숫자이면 그 필드가 출력

awk '$4 ~ /Chin$/ { print "The price is $" $8 "." }' datafile : 네 번째 필드가 Chine으로 끝나면 "The price is $" 8번 필드 및 마침표가 출력

awk -F: '{ print $1 } ' datafile : -F 옵션은 입력 필드를 ':'로 구별.

awk -F"[ :]" '{ print $1, $2 } ' datafile : 입력 필드로 스페이스와 ':'를 필드 구별자로 사용

awk -f awk_script.file datafile : -f 옵션은 awk 스크립트 파일 사용할 때 씀.



awk '$7 == 5' datafile : 7번 필드가 5와 같다면 출력

awk '$2 == "CT" { print $1, $2 }' datafile : 2번 필드가 "CT" 문자와 같으면 1, 2 번 필드 출력

awk '$7 < 5 { print $4, $7}' datafile : 7번 필드가 5보다 작다면 4번, 7번 필드 출력

awk '$6 > .9 { print $1, $6}' datafile : 6번 필드가 .9 보다 크다면 1번, 6번 출력

awk '$8 > 10 && $8 < 17 ' datafile 

awk '$2 == "NW" || $1 ~ /south/ { print $1, $2 }' datafile 

mariadb-10.2.14 / PHP 7.0.16 설치시 아래와 같이 mysqli 에러 발생
make: *** [ext/mysqli/mysqli_prop.lo] Error 1
make: *** [ext/mysqli/mysqli_api.lo] Error 1
In file included from /root/src/php-7.0.16/ext/mysqli/php_mysqli_structs.h:63,
from /root/src/php-7.0.16/ext/mysqli/mysqli_fe.c:32:
/opt/mysql/include/mysql/my_global.h:3:2: warning: #warning This file should not be included by clients, include only <mysql.h>
In file included from /root/src/php-7.0.16/ext/mysqli/php_mysqli_structs.h:79,
from /root/src/php-7.0.16/ext/mysqli/mysqli_fe.c:32:
/opt/mysql/include/mysql/my_sys.h:3:2: warning: #warning This file should not be included by clients, include only <mysql.h>
In file included from /root/src/php-7.0.16/ext/mysqli/mysqli_fe.c:32:
/root/src/php-7.0.16/ext/mysqli/php_mysqli_structs.h:82:21: error: my_list.h: No such file or directory
/root/src/php-7.0.16/ext/mysqli/php_mysqli_structs.h:83:22: error: m_string.h: No such file or directory
/root/src/php-7.0.16/ext/mysqli/php_mysqli_structs.h:86:21: error: m_ctype.h: No such file or directory

보통 이런경우 구글에다가 검색해보면 

phpbug 사이트에 나오는 경우가 종종 있다.

https://bugs.php.net/patch-display.php?bug_id=75612&patch=mysql-mariadb-10.3.patch&revision=latest

나온대로 소스 수정해서 설치하면 됨


ex)해결책은 아래와 같이 소스 수정하라고 나와있음 그중에서diff -up php-7.2.4/ext/mysqli/mysqli_api.c.omv~ php-7.2.4/ext/mysqli/mysqli_api.c
ㄴ여기 보면 수정해야할 소스 경로 나오죠 ? vi로 php-7.2.4/ext/mysqli/mysqli_api.c 들어가서
--- php-7.2.4/ext/mysqli/mysqli_api.c.omv~ 2018-04-06 21:50:05.183703414 +0200
+++ php-7.2.4/ext/mysqli/mysqli_api.c 2018-04-06 21:50:16.436829372 +0200
@@ -616,7 +616,7 @@ PHP_FUNCTION(mysqli_change_user)
ㄴ616 라인에 보면
  size_t   user_len, password_len, dbname_len;
  zend_ulong  rc;
 #if !defined(MYSQLI_USE_MYSQLND) && defined(HAVE_MYSQLI_SET_CHARSET)
- const  CHARSET_INFO * old_charset;
+ const  MY_CHARSET_INFO * old_charset;
ㄴ위의 내용이 있습니다. 저기서 - 부분은 삭제(혹은 주석) 하고 + 부분은 추가, 즉 CAHRSET_INFO 를 MY_CHARSET_INFO 로변경
 #endif
 
  if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Osss!", &mysql_link, mysqli_link_class_entry, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) {
diff -up php-7.2.4/ext/mysqli/mysqli.c.omv~ php-7.2.4/ext/mysqli/mysqli.c
ㄴ위에서 한것처럼 똑같이 vi 로 php-7.2.4/ext/mysqli/mysqli.c 열고
--- php-7.2.4/ext/mysqli/mysqli.c.omv~ 2018-04-06 21:49:41.782434506 +0200 +++ php-7.2.4/ext/mysqli/mysqli.c 2018-04-06 21:49:52.708561249 +0200 @@ -26,6 +26,7 @@ ㄴ26번 라인보면 #include <signal.h> +#include <server/mysql_version.h> ㄴ여기는 따로 삭제할필요없이 위 내용만 추가하면 되겠죠 ? 이런식으로 어느 파일을 열어서 어느 라인에 추가 삭제 혹은 수정한다음 컴파일 하면 됩니다. #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" diff -up php-7.2.4/ext/mysqli/mysqli_nonapi.c.omv~ php-7.2.4/ext/mysqli/mysqli_nonapi.c --- php-7.2.4/ext/mysqli/mysqli_nonapi.c.omv~ 2018-04-06 21:51:43.217399945 +0200 +++ php-7.2.4/ext/mysqli/mysqli_nonapi.c 2018-04-06 21:58:52.799445824 +0200 @@ -263,7 +263,7 @@ void mysqli_common_connect(INTERNAL_FUNC php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); #if !defined(MYSQLI_USE_MYSQLND) - mysql->mysql->reconnect = MyG(reconnect); +/* mysql->mysql->reconnect = MyG(reconnect); */ #endif mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&MyG(allow_local_infile)); diff -up php-7.2.4/ext/mysqli/mysqli_prop.c.omv~ php-7.2.4/ext/mysqli/mysqli_prop.c --- php-7.2.4/ext/mysqli/mysqli_prop.c.omv~ 2018-04-06 21:50:25.687842714 +0200 +++ php-7.2.4/ext/mysqli/mysqli_prop.c 2018-04-06 21:50:35.116768902 +0200 @@ -23,6 +23,7 @@ #include <signal.h> +#include <server/mysql_version.h> #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" diff -up php-7.2.4/ext/mysqli/php_mysqli_structs.h.omv~ php-7.2.4/ext/mysqli/php_mysqli_structs.h --- php-7.2.4/ext/mysqli/php_mysqli_structs.h.omv~ 2018-04-06 21:49:12.161080045 +0200 +++ php-7.2.4/ext/mysqli/php_mysqli_structs.h 2018-04-06 21:58:44.599503172 +0200 @@ -79,11 +79,7 @@ #include <my_sys.h> #include <mysql.h> #include <errmsg.h> -#include <my_list.h> -#include <m_string.h> #include <mysqld_error.h> -#include <my_list.h> -#include <m_ctype.h> #include "mysqli_libmysql.h" #endif /* MYSQLI_USE_MYSQLND */ @@ -326,7 +322,7 @@ ZEND_BEGIN_MODULE_GLOBALS(mysqli) char *default_user; char *default_socket; char *default_pw; - zend_long reconnect; +/* zend_long reconnect; */ zend_long allow_local_infile; zend_long strict; zend_long error_no;




참고로 위 에러는 centos 7 에 php 7.2 - mariadb 10.3 설치시 php 컴파일할 ㄸ ㅐ에러 난다.

이거 작성할때는 위와같이 소스파일 수정하면 잘 됐었는데 오늘(2019-05-28) 해보니까 또 다른 에러가 난다.

In file included from /root/src/php-7.2.18/Zend/zend.h:29:0,

                 from /root/src/php-7.2.18/main/php.h:35,

                 from /root/src/php-7.2.18/ext/mysqli/mysqli_driver.c:25:

/root/src/php-7.2.18/ext/mysqli/mysqli_driver.c: In function ‘driver_reconnect_read’:

/root/src/php-7.2.18/Zend/zend_API.h:183:76: error: ‘zend_mysqli_globals’ has no member named ‘reconnect’

 #define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) (module_name##_globals.v)

                                                                            ^

/root/src/php-7.2.18/Zend/zend_types.h:671:5: note: in definition of macro ‘ZVAL_BOOL’

    (b) ? IS_TRUE : IS_FALSE; \

     ^

/root/src/php-7.2.18/ext/mysqli/php_mysqli_structs.h:337:16: note: in expansion of macro ‘ZEND_MODULE_GLOBALS_ACCESSOR’

 #define MyG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqli, v)

                ^

/root/src/php-7.2.18/ext/mysqli/mysqli_driver.c:35:20: note: in expansion of macro ‘MyG’

  ZVAL_BOOL(retval, MyG(value)); \

                    ^

/root/src/php-7.2.18/ext/mysqli/mysqli_driver.c:120:1: note: in expansion of macro ‘MAP_PROPERTY_MYG_BOOL_READ’

 MAP_PROPERTY_MYG_BOOL_READ(driver_reconnect_read, reconnect)

 ^

In file included from /root/src/php-7.2.18/main/php.h:39:0,

                 from /root/src/php-7.2.18/ext/mysqli/mysqli_driver.c:25:

/root/src/php-7.2.18/ext/mysqli/mysqli_driver.c: In function ‘driver_reconnect_write’:

/root/src/php-7.2.18/Zend/zend_API.h:183:76: error: ‘zend_mysqli_globals’ has no member named ‘reconnect’

 #define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) (module_name##_globals.v)

                                                                            ^

/root/src/php-7.2.18/ext/mysqli/php_mysqli_structs.h:337:16: note: in expansion of macro ‘ZEND_MODULE_GLOBALS_ACCESSOR’

 #define MyG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqli, v)

                ^

/root/src/php-7.2.18/ext/mysqli/mysqli_driver.c:42:2: note: in expansion of macro ‘MyG’

  MyG(value) = Z_LVAL_P(value) > 0; \

  ^

/root/src/php-7.2.18/ext/mysqli/mysqli_driver.c:121:1: note: in expansion of macro ‘MAP_PROPERTY_MYG_BOOL_WRITE’

 MAP_PROPERTY_MYG_BOOL_WRITE(driver_reconnect_write, reconnect)

 ^

make: *** [ext/mysqli/mysqli_driver.lo] Error 1


요런 에러 난다.


이거 해결 방법이 소스 파일 수정하지말고 
--with-mysqli=/opt/mysql/bin/mysql_config --with-pdo-mysql=/opt/mysql
처음 컴파일 옵션 위와같이 줫는데
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/tmp/mysql.sock

위와같이 바꿨다. 잘된다.


php 7 이상부터는 mysqli=path(경로)로 주지 말고 mysqlnd로 줘야 한다.

rpm -qf /usr/bin/ssh

openssh-clients-5.3p1-123.el6_9.x86_64

해당파일이 어느패키지에 들어가있는지



rpm -ql openssh-clients-5.3p1-123.el6_9.x86_64

/etc/ssh/ssh_config

/usr/bin/.ssh.hmac

/usr/bin/scp

해당 패키지에 어느파일이 들어있는지

'job > linux' 카테고리의 다른 글

libphp5.so: undefined symbol: unixd_config  (0) 2018.08.31
iptables 차단 정책 로그 쌓기  (0) 2018.08.31
sar 명령어 옵션 설명  (0) 2018.08.31
dell / hp 서버 서비스 태그 확인하기  (0) 2018.08.31
sed 및 awk 사용법  (0) 2018.08.31

LogFormat "%h %l %u %T %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %P" combined


+ Recent posts