备忘录

105 阅读3分钟

备忘录

Linux

常用命令

# systemclt命令启动的日志
journalctl -u logstash.service    
​
# 端口号、进程号、服务查询
netstat -nap | grep 80
netstat -tunlp | grep 80
lsof -i:80
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'   # 查看tcp各状态连接数
ls -l /proc/22205/cwd # 查看安装目录  
find /var -name test.file # 查找文件位置
​
# 内存、磁盘大小查看
du -h -x --max-depth=1  # 查看当前目录下其他目录文件占用大小
ls -lh
free -m -h
du -h
​
# 日志、其他文件查看
less catalina.out   # G:跳转到日志尾部     空格:下一页      B:上一页   F:搜索        ?关键字:通配符 n:上一个关键字 N:下一个关键字  
tail -f catalina.out | grep -C 30 '关键字' --color
tail -300f catalina.out
​
# 防火墙
firewall-cmd --zone=public --add-port=80/tcp --permanent # 添加端口80到白名单中
firewall-cmd --reload # 重载防火墙(白名单)配置
firewall-cmd --zone=public --list-ports # 查看防火墙开放端口# vim 
:%s/a/b/g # 将整个文件的所有a替换为b# 抓包
tcpdump -i eth0  dst host 121.37.234.98  # 监听 eth0网卡的往指定ip发送的请求
tcpdump -i eth0  dst port 1883  # 监听 eth0网卡的往指定port发送的请求# 其他
rz # 上传文件 
sz # 下载文件
​
history > 111.txt   # 覆盖重定向 
history >> 111.txt  # 追加重定向 
​
unzip -O CP936 dist.zip   # 解压(-O是指定字符集解决压缩包乱码问题)
​
scp -r orderdispatch@130.81.9.129:/orderdispatch/fis/ordercollect/ordercollect-server-module-0.0.1-SNAPSHOT.jar /orderdispatch/fis/ordercollect  # 复制文件 从远程复制目录到本地
​
tar -zxvf xxx.tar.gz ./   # 将xxx.tar.gz 解压到指定目录 z: 打包   c: 压缩  x: 解压  v:过程   f:代表指定文件名
tar -zcvf xxx.tar.gz ./xxx/   # 将指定文件或目录下文件压缩到xxx.tar.gz

启动命令

# showdoc
docker run -d --name showdoc --user=root --privileged=true -p 4999:80 \
-v /usr/local/showdoc/showdoc_data/html:/var/www/html/ star7th/showdoc
​
# kafka
./bin/kafka-server-start.sh -daemon ./config/server.properties

启动脚本

start.sh
#!/bin/bash#虚拟机启动参数
JAVA_OPTS="-Xms512m -Xmx1024m"
#应用jar包名称
APPLICATION_NAME=xxxx-1.0.0-SNAPSHOT.jar
#应用路径
APPLICATION_HOME=`pwd`
#pid文件路径
APPLICATION_PID="${APPLICATION_HOME}/xxxx.pid"if [ -f "$APPLICATION_PID" ]; then
   PID=`cat "$APPLICATION_PID"`
   ps -p $PID >/dev/null 2>&1
   if [ $? -eq 0 ] ; then
        echo " ******  $APPLICATION_NAME already running!  ****** "
        exit 1
   fi
fi#springboot 外部配置文件必须先获取jar的当前路径,在执行才能生效
cd $APPLICATION_HOME
nohup java $JAVA_OPTS -jar $APPLICATION_HOME/$APPLICATION_NAME >/dev/null 2>&1 &
# nohup java $JAVA_OPTS -jar $APPLICATION_HOME/$APPLICATION_NAME &
echo $! > $APPLICATION_PID
stop.sh
#!/bin/bash#应用jar包名称
APPLICATION_NAME=xxxx-1.0.0-SNAPSHOT.jar
#应用路径
APPLICATION_HOME=`pwd`
#pid文件路径
APPLICATION_PID="${APPLICATION_HOME}/xxxx.pid"if [ -f "$APPLICATION_PID" ] && kill -0 $(cat "$APPLICATION_PID"); then
   PID=`cat "$APPLICATION_PID"`
   kill -9 $PID
   rm -f "$APPLICATION_PID"
else
   echo " ******  $APPLICATION_NAME already stoped!  ****** "
fi
restart.sh
#!/bin/bash
echo stop application
sh stop.sh
echo start application
sleep 10
sh start.sh

常见问题

cpu过高
  1. top找出占用cpu、内存较高的进程(pid:27291)
  1. ps -mp 27291 -o THREAD,tid,time 找出占用较高的线程(tid:27909 线程id是10进制的)
  1. printf "%x\n" 将10进制的tid转换为16进制(tid:6d05 jvm的线程id是16进制的)
  1. jstack 27291 | grep 6d05 -A 30 追踪线程的栈信息,从而根据栈信息找到对应业务代码
gc垃圾回收

jstat -gcutil 73883

S0S1EOMCCSYGCYGCTFGCFGCTGCT
0.000.0038.1399.3092.5990.3180.87812441.23742.115
survival区-0survival区-1eden区old区youngGc次数youngGc时间fullGC次数fullGc时间
too many open files
lsof -p pid | wc -l                                         #查看某个进程的链接数量                lsof: list openfiles 
          
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more         #按照句柄数数量倒序打印出pid
​
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr| head -n 10  #按照句柄数数量倒序前10个打印出pid    
​
lsof | grep pid                                             #打印出pid的句柄详情
ss -lntup |grep 9092
​
ulimit -n                                                   #查看句柄限制

Mysql

# 复制表
insert into sys_menu_0305 SELECT * FROM sys_menu;
​
# 备份表到sql文件
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
mysqldump -u root -p -h databaseUrl dbName tableName  > bakName.sql
​
# 恢复备份sql文件
mysql -uroot -p123 # 登录mysql
use dbName # 指明使用数据库
source /root/bakName.sql # 执行备份文件

Nginx

配置示例

nginx.conf
​
user  root;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
​
pid        /usr/local/nginx/logs/nginx.pid;
​
​
events {
    worker_connections  1024;
}
​
​
http {
​
    include       mime.types;
    default_type  application/octet-stream;
​
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
​
    #access_log  logs/access.log  main;
​
    sendfile        on;
    #tcp_nopush     on;
​
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #开启或关闭gzip on off
    gzip  on;
    
    #不使用gzip IE6
    gzip_disable "msie6";
    #是否开启gzip静态资源 
    gzip_static on; 
    #gzip压缩最小文件大小,超出进行压缩(自行调节)
    gzip_min_length 100k;
    #buffer 不用修改 
    gzip_buffers 4 16k; 
    #压缩级别:1-10,数字越大压缩的越好,时间也越长
    gzip_comp_level 3; 
    #  压缩文件类型
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary off; 
​
​
​
   
    
    include /usr/local/nginx/conf.d/*.conf;
​
   
​
​
server {
​
​
        listen       8094;
        server_name  localhost;
​
        #charset koi8-r;
​
        #access_log  logs/host.access.log  main;
​
        location / {
                root   /opt/src/platform-xxxx/web/;
                index  index.html index.htm;
                
                #访问静态文件
                if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) {
                    add_header Content-Disposition: 'attachment;';
                    add_header Content-Type: 'APPLICATION/OCTET-STREAM';
                }
                    #proxy_pass http://app.time-weekly.com;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header REQUEST_HOST $host;
                
                charset UTF-8;
        }       
        
        location /v1/ {
            proxy_pass  http://127.0.0.1:8941;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REQUEST_HOST $host;
​
            client_max_body_size 100m;
        }
        
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
​
        location = /favicon.ico {  
                log_not_found off;  
                access_log off;  
        }
​
        location ~ /. {
            deny all;
            access_log off;
            log_not_found off;
        }
​
        location /file/ {
                alias /opt/src/upload/;
                expires 7d;
        }
​
    }
​
​
​
    upstream  socket{
            ip_hash;
            server 192.168.2.22:6005;
    }
}
​
minio配置
        # 上传
        location /upload/ {
                proxy_pass  http://192.168.2.47:9000/;
                client_max_body_size 100m;
        }
        
        # 下载
        location /v1/minio/download/ {
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header REQUEST_HOST $host;
               charset UTF-8;
               proxy_pass  http://127.0.0.1:18051/minio/download;
               client_max_body_size 100m;
        }        
        
oss配置
  
        
        location /oos/ {
            proxy_pass  http://xxx.oss-cn-hangzhou.aliyuncs.com/oos/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REQUEST_HOST $host;
            charset UTF-8;
​
            client_max_body_size 100m;
        }
​
h5配置
​
        # 多个vue页面,访问形式 http://ip:port/xxxVueWeb/question/list 
        # http://ip:port/xxxVueWeb/question/detail?id=1524237369920716821
        location ^~/xxxVueWeb {
            alias /xx/xx/xxx/h5/xxxVueWeb;
            try_files $uri $uri/ /index.html last;
            index index.html;
        }
        
        # 单个h5页面,访问形式 http://ip:port/privacyPolicy.html
        location /privacyPolicy {
                root   /home/project/xxx/h5/;
                                index  privacyPolicy.html ;
                                
                                #访问静态文件
                                if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) {
                                        add_header Content-Disposition: 'attachment;';
                                        add_header Content-Type: 'APPLICATION/OCTET-STREAM';
                                }
                                #proxy_pass http://app.time-weekly.com;
                                proxy_set_header X-Real-IP $remote_addr;
                                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                proxy_set_header REQUEST_HOST $host;
                                
                                charset UTF-8;
        }
​
前端配置
location / {
                root   /home/project/xxx/xx-web/;
                                index  index.html index.htm;
​
                                #访问静态文件
                                if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) {
                                        add_header Content-Disposition: 'attachment;';
                                        add_header Content-Type: 'APPLICATION/OCTET-STREAM';
                                }
                                #proxy_pass http://app.time-weekly.com;
                                proxy_set_header X-Real-IP $remote_addr;
                                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                proxy_set_header REQUEST_HOST $host;
​
                                charset UTF-8;
        }
​
地图配置
        # 高德地图
        location /areas_v3/ {
                        proxy_pass http://geo.datav.aliyun.com/areas_v3/;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header REQUEST_HOST $host;
                        charset UTF-8;
​
                        client_max_body_size 100m;
        }
socketio配置
    # server内
    server {
        location  /socket.io {
                proxy_set_header X-Real_IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_pass http://socket;
             }
    }
    
    # server外 负载均衡
    upstream  socket{
            ip_hash;
            server 192.168.2.22:6005;
    }
​
server {
    listen       5000;
    server_name  localhost;
        
    location / {
        proxy_pass http://socketio/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        charset UTF-8;
        client_max_body_size 100m;
    }
}
​
upstream socketio {
        ip_hash;
        server 127.0.0.1:7002 weight=10  max_fails=3 fail_timeout=30s;
}

Kafka

常见问题

启动异常:InconsistentClusterIdException

现象

kafka集群一般都是部署在zookeeper集群之上的,当Kafka出现异常时,强行关闭kafka集群或zookeeper集群时,重新启动时经常会出现异常InconsistentClusterIdException。 (未实际验证)

img

原因分析及解决方案

kafka配置日志路径,用来保存执行过程中的各种信息,当kafka异常关闭时,日志记录就会出现异常,会把当时的情况记录到meta.properties文件中,重新启动时此文件会对启动造成影响,kafka重启报错的原因就在这里。 (未实际验证)

修改server.properties中listeners=PLAINTEXT://0.0.0.0:9092;日志目录log.dirs不要放在tmp目录下,具体配置如下图: (已实际操作、但是可能碰巧)

img

(未实际验证)

  1. 清空日志目录【日志不重要或可以容忍日志丢失】。
  2. 调整日志目录【需要修改配置】。
  3. 删除日志目录下的meta.properties文件。

Netty

常见问题

nginx健康检查

现象

img

原因分析及解决方案

关闭nginx对于netty监听端口的安全检查

TSDB数据库

常见问题

数据类型错误

现象

img

img

原因分析及解决方案

TSDB多值模型的field 值只支持 String,Number,Boolean、且不可存在null值

若有集合数据可以转化为JSON字符串、对于数据做判空等

\