无bash情况
有时候通过ssh登录服务器后,“$”前面什么都没有,并且无法使用Tab补全命令,无法使用后退键等等情况称为无bash登录
解决方法:直接输入命令 bash 即可 前提是用户有使用bash的权限
还可以看到所在目录 所属用户 当然还可以直接切换root用户即可
数据库问题
查看错误日志:/etc/my.cnf 或者find 找日志路径
mysql -u root -p
SHOW GLOBAL VARIABLES LIKE '%log%'; 查看所有日志信息
show processlist;
show full processlist;
输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,查找负荷最重的 SQL 语句
优化该SQL,比如适当建立某字段的索引
您可以通过执行类似kill [$ID];的命令来终止长时间执行的会话 ( [$ID]为该查询语句对应的会话ID )
开启慢查询:set global slow_query_log=1; 开启 show variables like '%quer%'; 查询是否开启及目录
set global long_query_time=0.001; #更改时间
开启慢查询后,show status like "%slow_queries%"; 显示日志中已经有的慢查询记录数
具体还是要看日志信息
tail -f /var/lib/mysql/Adidas-Meeting-For-CHINA-slow.log
mysqldumpslow -s t -t 10 /var/lib/mysql/Adidas-Meeting-For-CHINA-slow.log (统计排序)
开启查询日志 : set global general_log = ON; SHOW VARIABLES LIKE 'general%';
日志查询: 直接 tail -n 20 xxx.log 或者cat
查看数据库连接次数
SHOW STATUS LIKE 'connections';
查看CPU数和user scheduler数目
SELECT cpu_count,scheduler_count FROM sys.dm_os_sys_info
查看最大工作线程数
SELECT max_workers_count FROM sys.dm_os_sys_info
备份数据库
/usr/bin/mysqldump -u root -p --databases sql9zhik8smy > ./sql9zhik8smy.sql
恢复数据库
mysql -u root -p < sql9zhik8smy.sql
查看数据库:
用户与权限 mysql> select host,user from mysql.user;
数据库 mysql> show databases;
增加索引(index)
ALTER TABLE vapp.video_upload ADD INDEX idx_vodvideoid (vod_video_id);
alter table table_name add index index_name (column_list) ;
table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔
===========================================================
nginx问题
nginx -t 检查配置没有问题
nginx 启动不了 查看 status 或者 日志 cat /var/log/nginx/error.log
bind() to 0.0.0.0:8080 failed (13: Permission denied)
1:确认8080 未被占用
2:关闭SElinux setenforce 0
=========================================================
定时任务 crontab不执行问题
检查任务是否有权限执行 最好用root 或者sudo crontab -e 添加任务 -l查看 确保crontab有权执行
检查任务命令是否正确 * bin/bash xxxxx.sh
或者增加执行日志信息 0 21 0 /sbin/shutdown -r now >>/cron.log 2>&1 检查crontab服务状态
查看日志 find / -name corn tail -f /var/log/cron
尽量把脚本放到内置的目录 cron.daily/ cron.deny cron.hourly/ cron.monthly/ cron.weekly/ 下
并确保有执行权限
===============================================
zabbix 相关问题
SElinux必须关闭 防火墙必须开启10050端口
================================================
Linux下端口映射工具rinetd
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
tar zxvf rinetd.tar.gz
make
make install
vi /etc/rinetd.conf
源地址 源端口 目的地址 目的端口
0.0.0.0 8080 172.19.94.3 8080
rinetd -c /etc/rinetd.conf ##启动转发
pkill rinetd ##关闭进程
==============================================
内存与CPU问题
top 直接查看cpu使用
按M 按照内存占用排序
按P cpu排序
查看哪个进程
ps -ef | grep 进程号
如果是多个进程 名字一样 ps -ef | grep 进程 | grep 进程号/端口号
找出3个 暂用内存大的进程 ps -aux | sort -k4nr | head -3
查看进程中的线程:top -Hp pid
追踪进程(看进程操作了什么,运行的时间是多少s)
简单输出:strace -cp 15012
详细输出:strace -o /tmp/output.txt -T -tt -F -e trace=all -p 7757
查看其log
tail -f /tmp/output.txt
PHP占用cpu高:
用 gdb -p 17729 (调试程序用的gdb)(yum -y install gdb)
php慢日志开启条件,需要在 php-fpm.conf 配置如下:
request_slowlog_timeout = 3 #脚本超时秒数
slowlog = /var/log/php.log.slow #记录慢日志路径
查看近1000条php慢日志:
tail -n 1000 /var/log/php.log.slow
然后修改php参数 (加大)
=============================================
安装与查看软件问题
rpm -qa | grep xxx
yum list installed yum list | grep xxx
yum info xxx
netstat -an | grep 8808
============================================
开机启动
chmod 777 /etc/rc.d/rc.local
/etc/rc.d/rc.local 文件中的内容格式不正确:
开头少了#!/bin/bash,也是执行不成功的,会提示你格式不对
如果是命令直接写 命令即可 如果是应用程序的脚本启动最好指定其配置文件(ps找出)
如:/home/agent/bin/falcon-agent -c /home/agent/config/cfg.json
设置开机自动以某个非root用户启动脚本
su - user -c /home/user/run.sh
总结:rc/local 里面放命令 尽量是完整命令带绝对路径 init.d 里面放脚本并加入开机启动
如果开机启动命令复杂或者有其他问题 可以用supervisor来管理开机进程/程序
============================================
系统时间修改
date
timedatectl status
timedatectl set-timezone Asia/Shanghai
ntpdate ntp2.aliyun.com
hwclock --hctosys //设置系统时间和硬件时间同步
修改完后,记得执行clock -w,把系统时间写入CMOS
或者 简单命令: yes | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
通用方法:
yum install ntpdate
ntpdate ntp1.aliyun.com
echo '/5 * /usr/sbin/ntpdate 192.168.25.253 >/dev/null 2 >&1'>>/var/spool/cron/root
==========================================
centos ssh端口更改
先建立2个ssh端口 即22下面再添加一行 Port 10024 开启防火墙10024
连接10024 正常后 关闭22端口 (#) 关闭防火墙22
重要数据库 指定IP地址访问 或者去掉外网IP 只用内网连接
sshd 启动不了 或者端口没有起来 查看防火墙与SElinux
sshd -t 检查配置文件是否正确
========================================
关于keepalived问题解决
默认为多播 也可以配置单播(云服务器会禁多播)
配置脚本 (脚本务必使用)
日志出错:Error exec-ing command '/home/backup.sh', error 8: Exec format error
说明对应的脚本没有定义使用bash来执行 脚本中务必注明:#!/usr/bin/env bash
========================================
tcpdump 抓包
tcpdump tcp port 3306 and host 168.63.129.16
========================================
jenkins问题:
Access Denied
没有Overall/Read权限
vim /var/lib/jenkins/config.xml
true
hudson.model.Computer.Configure:jenkins
systemctl restart jenkins
进入web 修改权限 取消矩阵授权
改为 登录用户可以做任何事 同时不选择allow anonymous read access
重启jenkins
========================================
婵道问题:
cd /opt
./zbox start
指定端口 ./zbox -ap 80 -mp 3307 start
========================================
终端上传下载
yum -y install lrzsz
rz (上传) rz
sz (下载) sz xxx
更新Centos7 yum源
cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
yum clean all &&yum makecache
yum install epel-release -y
===========================
CPU占用大解决
top 查看
cd /proc/32676 -> ll 直接输出哪个在运行的文件(可能是exe的显示)
top -Hp 10765 显示一个进程的线程运行信息列表 按 P 按照cpu使用排序
将线程PID转化为16进制 printf “%x” 10804 之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的
查看堆栈,找到线程在干嘛 jstack 10765 | grep ‘0x2a34’ -C5 --color
kill -9 id pkill 名称
java进程占用解决:
show-busy-java-threads.sh脚本 大神的脚步直接输出
git clone https://github.com/oldratlee/useful-scripts.git
cd useful-scripts/bin
./show-busy-java-threads.sh # 从 所有的 Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈
============================
nginx 代理超时与上传限制:
location / {
proxy_read_timeout 120s;
}
server {
client_max_body_size 100M;
}
================================
服务器进程数问题解决:
报错 fork:Cannot allocate memory
可能是进程数超限导致。系统内部的总进程数达到了
pid_max 时,再创建新进程时会报 “fork:Cannot allocate memory” 错
执行以下命令,查看系统 pid_max 值
sysctl -a | grep pid_max
执行以下命令,查看系统内部总进程数
pstree -p | wc -l
临时调大 pid_max
echo 42768 > /proc/sys/kernel/pid_max
永久调大
vim /etc/sysctl.conf
kernel.pid_max=65535
sysctl -p 配置立即生效
==================================
阿里云分配SWAP(虚拟内存) 对所有虚拟服务器都通用
默认阿里云不分配SWAP而是尽量使用物理内存
如果应用需要SWAP才能使用则需要自行添加
创建用于交换分区的文件
dd if=/dev/zero of=/mnt/swap bs=1M count=5120 (5G的SWAP)
设置交换分区文件 mkswap /mnt/swap
启用交换分区文件 swapon /mnt/swap
设置开机时自启用SWAP分区,需要修改文件/etc/fstab
/mnt/swap swap swap defaults 0 0
修改swappiness参数值 (在Linux系统中,可以通过查看/proc/sys/vm/swappiness内容的值来确定系统对SWAP分区的使用原则。当 swappiness内容的值为0时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用SWAP分区。
当swappiness内容的值为100时,表示积极地使用SWAP分区,并且把内存中的数据及时地置换到SWAP分区)
echo 10 >/proc/sys/vm/swappiness (空闲内存少于10%时才使用SWAP分区)
若需要永久修改此配置,在系统重启之后也生效的话,通过vim命令编辑/etc/sysctl.conf
vm.swappiness = 10
sysctl -p && cat /proc/sys/vm/swappiness
================================
java后台运行程序
java -jar shareniu.jar &
nohup java -jar shareniu.jar >/dev/null &
nohup openvpn server.conf >/dev/null 2>&1 &
nohup openvpn server.conf >./ab.txt 2>&1 &
cd /root/webstack-web && nohup /root/webstack-web/hugo server --baseUrl=180.215.203.239 --bind=0.0.0.0 >/dev/null 2>&1 &
注意有些程序需要进入固定目录下执行命令或者在某目录下找配置文件 因此需要先进入对应目录再nohup 或使用绝对路径执行命令
===================================
文件删除磁盘未释放
进程还在占用文件
yum install lsof -y && lsof |grep delete | more
losf查看文件被占用情况
lsof -p 1152 进程占用了哪些文件
lsof -i:22 端口占用了哪些文件
删除应用文件正确顺序:停止服务/杀死进程----删除文件
删除log类型文件最好的方式 echo " " > xxx.log nohup.out也文件适用 以上可避免这个问题
===================================
隐藏文件问题
以 . 打头的文件都是隐藏文件,你必须以 ls -al 才能看得到 隐藏文件一般为特殊文件或者安全性文件
普通tar不会打包隐藏文件 如果打包隐藏文件需要 tar zcvf www.tar.gz .[!.]
或者退到上层目录然后直接打包对应目录即可
===================================
lnmp无法删除.user.ini文件的解决办法
提示rm: cannot remove `http://xxx.com/.user.ini’: Operation not permitted
问题分析:根据上面的提示判断文件权限已经被锁定,需要先解除锁定
问题解决:输入以下命令
chattr -i /home/wwwroot/你的网站目录/.user.ini
然后再用rm -rf命令或者FTP去删除就可以了
===================================
新版本谷歌浏览器 ssl 证书问题
浏览无证书的网站需要在任意位置输入:thisisunsafe
===================================
mv: cannot move $ to $: Directory not empty
mv命令移动的东西如果在目标路径中已存在(不为空),那么它是移动不了的,这是mv的一种保护机制,防止错误覆盖
最好用rsync来代替mv命令 :rsync -a xxx xxx
===================================
docker中没有vi/vim/nano/ss/netstat等命令解决:
进入docker容器中:apt-get update && apt-get install vim net-tools iproute2 -y
举一反三:docker容器中通常可以用apt-get ( yum 、 dnf) 来安装各种软件
==================================
利用http代理 (本地需要有1087代理服务)
export https_proxy=http://127.0.0.1:1087 http_proxy=http://127.0.0.1:1087 all_proxy=socks5://127.0.0.1:1080
==================================
CentOS 6.9下的Setup工具
安装Setup命令工具
yum -y install setuptool
安装Setup工具配套的系统服务组件
yum -y install ntsysv
安装Setup工具配套的防火墙配置组件
yum -y install system-config-securitylevel-tui
安装Setup工具配套的网络配置组件
yum -y install system-config-network-tui
安装Setup工具配套的验证配置组件
yum -y install authconfig-gtk
安装Setup工具配套的键盘配置组件
yum -y install system-config-keyboard
==================================
CentOS6 YUM源失效解决方案
使用腾讯云源
备份原先yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos6_base.repo
将文件内的http替换为https
sed -i 's#http#https#g' /etc/yum.repos.d/CentOS-Base.repo
清除yum缓存并更新
yum clean all && yum makecache
==================================
Windows10上开启路由转发及添加路由 (慎用)
执行命令 (管理员)
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /D 1 /f
注册表
将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRoute设为1
启动Routing服务
将 Routing and Remote Access 服务的启动类型更改为自动并启动服务
进入CMD执行命令
sc config RemoteAccess start= auto
sc start RemoteAccess
主机A添加路由
route add 192.168.114.0 mask 255.255.255.0 192.168.49.99
==================================
服务器内存溢出与内存泄漏:
系统或者程序(主要是java)造成和内存相关的问题主要有两种,内存溢出和内存泄漏
内存溢出(Out Of Memory) :就是程序申请内存时,没有足够的内存空间,程序报错运行不起来,或者已经运行的程序出现故障
内存泄露(Memory Leak):就是程序申请了内存,用完后没有释放,导致内存空间被占用,无法给别的程序分配内存,占用的内存越来越多最后还会导致其他程序出现内存溢出
==================================
docker镜像加速:
cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.lfree.org",
"https://docker.m.daocloud.io",
"https://docker-0.unsee.tech",
"https://docker.1ms.run"]
}
==================================
数据库备份0KB问题:
命令行备份数据库可以直接:
mysqldump -u root -p --databases sql9zhik8smy > ./sql9zhik8smy.sql
脚本中备份数据库需要写全目录:
/usr/bin/mysqldump -u root -p --databases sql9zhik8smy > ./sql9zhik8smy.sql
或者
/usr/local/mariadb/bin/mysqldump -uroot -pxxxxx --databases sql9zhik8smy > ./sql9zhik8smy.sql
评论 (0)