백 스테이지 개발
31358 단어 LinuxLinux 운영 비트
github 주소,좋아요 눌 러 주시 면 환영 합 니 다.계속 업 데 이 트 됩 니 다...
https://github.com/emaste-r/backend_note
장절 목록
자바 변조
CPU 이상 PID 먼저 찾기:
[root@iZ9458z0ss9Z ~]# top -c
그리고 이 프로 세 스 의 스 레 드 를 봅 니 다:
[root@iZ9458z0ss9Z ~]# top -Hp YOUR_PID
그리고 이상 한 라인 보기:
[root@iZ9458z0ss9Z ~]# jstack YOUR_THREAD_PID
이렇게 하면 이 스 레 드 가 어느 코드 까지 실행 되 고 있 는 지 볼 수 있 습 니 다.CPU 이상 이 발생 할 수 있 습 니 다.
[root@iZ94won0vbvZ ~]# printf '%x
' 15589
3ce5
[root@iZ94won0vbvZ ~]# jstack 15589 | grep "3ce" -C 5
"qtp540159270-15" #15 prio=5 os_prio=0 tid=0x00007f312878e000 nid=0x3cfd waiting on condition [0x00007f311115f000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000e002b348> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
--
at org.eclipse.jetty.util.thread.QueuedThreadPool.idleJobPoll(QueuedThreadPool.java:531)
at org.eclipse.jetty.util.thread.QueuedThreadPool.access$700(QueuedThreadPool.java:47)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:590)
at java.lang.Thread.run(Thread.java:745)
다음 오류 가 발생 할 수 있 습 니 다:
Unable to open socket file: target process not responding or HotSpot VM not loaded
원인:
jstack pid 。
해결 방안:
1、 pid /tmp , tmpwatch /tmp ...
pid;
2、 pid , jstack /data/you/path/your.pid 。
파 이 썬 튜 닝
본인 버 전:
centos7+python2.7.5
gdb 설치:
[root@iZ9458z0ss9Z ~]# sudo yum install gdb
다음 정보 가 나타 나 면 설치 성공 을 설명 합 니 다.
[root@ouyang ~]# gdb
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-100.el7_4.1
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
.
(gdb)
python 패키지 설치(py-list,py-bt 등 을 사용 할 수 있 습 니 다):
wget http://debuginfo.centos.org/6/x86_64/python27-python-debuginfo-2.7.5-10.el6.centos.alt.x86_64.rpm
rpm -ivh python27-python-debuginfo-2.7.5-10.el6.centos.alt.x86_64.rpm
python-debuginfo 패키지 설치 성공 에 대한 다음 정보 가 나타 납 니 다.
[root@iZ94won0vbvZ ~]# gdb -p 31618 # 31618 python PID
(gdb) py
py-bt py-down py-list py-locals py-print py-up python python-interactive
디 버 깅 을 시작 합 니 다.현재 스 레 드 가 실행 중인 코드 를 보십시오.
(gdb) py-list
858 # clear alarm so it doesn't fire while poll is waiting for
859 # events.
860 signal.setitimer(signal.ITIMER_REAL, 0, 0)
861
862 try:
>863 event_pairs = self._impl.poll(poll_timeout)
864 except Exception as e:
865 # Depending on python version and IOLoop implementation,
866 # different exception types may be thrown and there are
867 # two ways EINTR might be signaled:
868 # * e.errno == errno.EINTR
(gdb)
Mysql 일상 최적화
Mysql 느 린 조회 로그 보기
우선 my sql 이 느 린 조회,느 린 조회 로그 저장 위 치 를 열 었 는 지 판단 해 야 합 니 다.
[root@iZ9458z0ss9Z ~]# cat /etc/my.cnf| grep slow
slow_launch_time=2 # ,slow_launch_threads
slow_query_log=on #
slow_query_log_file=/data/log/your_slow_query.log # log
만약 열 리 지 않 았 다 면 어떻게 열 었 을까요?
mysql> set global slow_query_log='ON';
mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';
mysql> set global long_query_time=1; #
느 린 조회 로그 보기,주요 관심 인자:Querytime=몇 초 걸 리 는 지 알 아 보기=3.088468 Rowsexamined=영향의 행 수=43817
[root@iZ9458z0ss9Z ~]# tail -f /data/log/your_slow_query.log
# Time: 180301 16:17:20
# User@Host: root[root] @ iZ9458z0ss9Z [10.24.245.83]
# Thread_id: 9601563 Schema: miaoyan QC_hit: No
# Query_time: 3.088468 Lock_time: 0.000084 Rows_sent: 1 Rows_examined: 43817
# Rows_affected: 0
SET timestamp=1519892240;
select count(id) as cnt from `your_table` where com_id = 1867 and ptype = 1;
Mysql 실행 중인 sql 보기
현재 sql 실행 상황 보기:
mysql> show processlist;
+----------+---------+----------------------+----------------------+---------+-------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----------+---------+----------------------+----------------------+---------+-------+----------+------------------+
| 15490667 | seafile | localhost:45682 | ccnet-db | Sleep | 23 | | NULL |
| 15490668 | seafile | localhost:45684 | seafile-db | Sleep | 3 | | NULL |
| 15496875 | seafile | localhost:60158 | ccnet-db | Sleep | 1530 | | NULL |
| 15498263 | seafile | localhost:35184 | seafile-db | Sleep | 630 | | NULL |
| 9604402 | root | iZ9458z0ss9Z:22193 | your_db | Query | 1 | Sending data | select count(id) as cnt from `your_table` where com_id = 1769 and ptype=1 |
Sleep 상태의 항목 은 상관 할 필요 가 없습니다.Query 상태의 sql 을 보면 Time(초)이 너무 커서 걸 릴 수 있 습 니 다.개인 적 으로 select 의 sql 이 걸 리 면 먼저 kill 할 수 있 습 니 다.
kill 9604402
색인 이 있 는 지 천천히 분석 합 니 다.
explain select count(id) as cnt from `your_table` where com_id = 1769 and ptype=1;
Update 의 sql 이 라면 천천히 실행 이 끝 날 때 까지 기다 리 세 요.보통 시간 이 많이 걸 리 지 않 습 니 다.
Nginx 는 가장 자주 방문 하 는 IP 를 보고 이상 IP 를 금지 합 니 다.
상위 10 개 방문 이 가장 잦 은 IP 보기:
[root@iZ9458z0ss9Z ~]# awk '{a[$1]+=1;}END{for(i in a){print a[i] " " i;}}' /var/log/nginx/access.log |sort -gr | head -10
11929 123.44.55.66
9727 119.137.52.231
8132 111.18.73.48
2926 115.191.176.18
2407 183.198.212.108
2322 218.11.141.142
2257 183.225.60.104
2229 183.40.130.198
1990 115.207.217.131
1965 221.180.236.146
[root@iZ9458z0ss9Z ~]#
firewall-cmd
만약 에 우리 가 이 123.44.5.66 이 너무 수상 하 다 고 느낀다 면 firewall 을 사용 하지 않 는 방법:먼저 firewall 이 켜 졌 는 지 확인 하 십시오.
[root@iZ9458z0ss9Z ~]# firewall-cmd --state
running
123.44.5.66 사용 안 함:
[root@iZ9458z0ss9Z ~]# firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='123.44.55.66' reject"
success
재 부팅 적용:
[root@iZ9458z0ss9Z ~]# firewall-cmd --reload
success
[root@iZ9458z0ss9Z ~]# iptables -L | grep '123'
REJECT all -- 123.44.55.66 anywhere reject-with icmp-port-unreachable
IP 봉인 해제,-add-rich-rule 을-remove-rich-rule 로 변경:
[root@iZ9458z0ss9Z ~]# firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address='123.44.55.66' reject"
iptables
firewall-cmd 가 설치 되 어 있 지 않 으 면 iptables 를 시도 해 보 세 요.먼저 iptables 서비스 가 달 리 는 지 확인 하 세 요.
[root@iZ94won0vbvZ ~]# service iptables status
뛰 지 않 았 다 면:
: chkconfig iptables on
: chkconfig iptables off
,
: service iptables start
: service iptables stop
ip 거부 규칙 추가:
[root@iZ9458z0ss9Z ~]# cp /etc/sysconfig/iptables-config /var/tmp //
[root@iZ9458z0ss9Z ~]# iptables -I INPUT -s 123.44.55.66 -j DROP // ip
[root@iZ9458z0ss9Z ~]# service iptables save //
[root@iZ9458z0ss9Z ~]# service iptables restart //
추가 성공 여부 보기:
[root@iZ94won0vbvZ ~]# iptables -L // iptables
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 123.44.55.66 anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
오해 가 발견 되면 123.44.55.66 을 해제 하고 싶 습 니 다.
[root@iZ94won0vbvZ ~]# iptables -D INPUT -s 123.44.55.66 -j DROP
[root@iZ94won0vbvZ ~]# iptables -L | grep 123.44.55 // 123.44.55.66 , !
[root@iZ94won0vbvZ ~]#
하 드 디스크 모니터링 및 메 일 경보
하 드 디스크 사용량 df-h:
[root@iZ9458z0ss9Z script]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 14G 24G 36% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 28K 3.9G 1% /dev/shm
tmpfs 3.9G 408M 3.5G 11% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vdb 197G 124G 64G 66% /data
tmpfs 783M 0 783M 0% /run/user/0
만약 mail 을 설정 한 적 이 없다 면:
[root@001 ~]# vim /etc/mail.rc #
set from=xxxx@126.com # from:
set smtp=smtp.126.com # smtp: smtp
set smtp-auth-user=xx@126.com # set smtp-auth-user:
set smtp-auth-password=xxx # set smtp-auth-password: ,
set smtp-auth=login # smtp-auth:SMTP , login, CRAM-MD5 PLAIN
테스트 아래:
[root@iZ9458z0ss9Z script]# echo " " | mail -s " " xihuanjianguo@163.com
메 일 을 보 내 는 스 크 립 트 쓰기:
[root@iZ9458z0ss9Z script]# cat sendmail.sh
#!/bin/bash
# by kin
source /etc/profile
content=$1
address=$2
echo ${content} | mail -s ${content} ${address}
감시 하 드 디스크 스 크 립 트 쓰기:
[root@iZ9458z0ss9Z ~]# cat /data/your_script_path/hdd_alarm.sh
#!/bin/sh
# by kin
source /etc/profile;
runpath='/data/your_script_path'
# send sendmail.sh
send()
{
./sendmail.sh $1 your_email_1@163.com
./sendmail.sh $1 your_email_2@163.com
}
# hdd_alarm
if [ ! -d $runpath/hdd_alarm ]
then
mkdir $runpath/hdd_alarm
fi
# IP
Host_IP=`ifconfig |grep "inet "|grep -v 127.0.0.1|grep -v 'inet 10.'|grep -v '192.168'|awk '{print $2}'`
# df a b, a b
df -h | awk '{print $(NF-1),$NF}'|awk '{if($NF!=$1){print $0}}'|sed 's/\%//g'|sed '1d'|while read a b;
do
# a b
if [ -z $a ] || [ -z $b ]
then
:
else
#
old_used=`cat $runpath/hdd_alarm/hdd_tmp.log 2>/dev/null|grep "$b$"|awk '{print $(NF-1)}'|sed 's/\%//g'`
# 80 ,
if [ ! -z $old_used ] && [ $old_used -eq $a ] && [ $a -le 80 ]
then
continue;
fi
# >=80, send() ...
if [ $a -gt 80 ] ;
then
msg="Hdd_alarm:$Host_IP-$b-Reach-$a-precent"
echo "$msg" #>>./Hdd_alarm.log
send "$msg"
# send() 0,
if [ $? -ne 0 ];
then
echo -e "############Send Fail#############"
fi
fi
fi
done
# df ,
df -h >$runpath/hdd_alarm/hdd_tmp.log
정시 퀘 스 트 를 놓 고 15 분 마다 한 번 씩 달 립 니 다.
[root@iZ9458z0ss9Z script]# crontab -l
*/15 * * * * cd /data/your_script_path/;./hdd_alarm.sh >/dev/null 2>&1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.