Linux常用命令

文章目录

基操

查看公网IP
curl ifconfig.me
查看内网IP
ip addr

JAVA进程高CPU/内存排查

  1. 确定是哪个进程
top

在这里插入图片描述
有两个JAVA进程,采用下述命令判断具体是哪个java进程

ps -p <PID> -o command

在这里插入图片描述

日志

docker查看日志
docker滚动查看最后50行日志

在这里插入图片描述

k8s怎么查看关键字上下10行左右的日志

在这里插入图片描述

宿主机查看日志
查看前100行日志
head -n 100 filename
查看最后10行信息
tail -n 10 log4i.log 
grep 查找日志某关键字上下20行

在这里插入图片描述

grep 查找满足多个关键字

在这里插入图片描述

将日志输出到新文件中

在这里插入图片描述

在这里插入图片描述

grep 'fail\|error' a.txt
查看文件大小

查看文件夹

ls -lh data/

查看具体文件
在这里插入图片描述

查看某关键字进程所占端口
ps aux|grep Main
查看端口被占用
netstat  -anp  |grep  8000
  • windows端口被占用
    在这里插入图片描述
netstat -ano |findstr "49823"
taskkill /f /t /im "11980"
解压压缩包到当前目录
sudo tar zxvf go1.17.5.linux-amd64.tar.gz

解压.GZ结尾的压缩包

gunzip  xxxx.gz

VI

查看文档某处关键字

vi后,输入/+关键字再回车,即可跳转对应关键字位置处

替换文本

vi后,输入gg跳转开头,再输入dG清屏,再输入:set paste进入粘贴模式,之后insert进入编辑模式,粘贴后,:wq保存退出

保存/不保存修改

不保存

:q!

保存

:wq

文件

删除文件/文件夹
  • 删除文件
rm -rf 文件名
  • 删除文件夹
rm -rf 目录名 
复制
cp -r /home/packageA/* /home/cp/packageB/

外链

linux-go 安装

SHELL学习

第一次使用shell脚本代码备份
# !/bin/sh
cd www/wwwroot/my-admin-gin
echo "开始拉取最新代码"
echo `git pull`
name="my-admin-gin"
echo "进程名: $name"
# 获取相关进程id并杀死进程
id=`ps -ef | grep "$name" | grep -v grep | awk '{print $2}'`
echo "已杀死$name进程pid:$id"
kill -9 $id
cd server/
#以后台守护进程的方式运行server端
nohup ./$name > $name.log 2>&1 &
cd ../web
echo "正在打包前端文件,耗时估计2min,请耐心等待..."
echo `npm run build`
cd ../server
#显⽰⽂件最后10⾏
cat $name.log | tail -n 15
exit 0

不相关的一些知识

  • 每日一条-> https://blog.csdn.net/weixin_53601359/article/details/115553449?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165485295016782246489716%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165485295016782246489716&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-115553449-null-null.142v13pc_search_result_control_group,157v14control&utm_term=sql%E4%BC%98%E5%8C%96&spm=1018.2226.3001.4187

    查询SQL尽量不要使用select *,而是具体字段
    避免在where子句中使用or来连接条件
    尽量使用数值替代字符串类型
    使用explain分析你SQL执行计划
    索引不适合建在有大量重复数据的字段上
    where中使用默认值代替null

    高级SQL优化
    批量插入性能提升
    复合索引最左特性
    inner join 、left join、right join,优先使用inner join
    尽量使用union all替代union

  • 每日一条->
    fiddler实现请求转发到本地,测试神器
    FiddlerObject.log(“oSession.host :”+oSession.host );
    // 判断host是否为*** 并且路径是否包含***
    if(oSession.host == ‘api.imbeiyu.com’){
    //转发配置
    oSession.host = ‘127.0.0.1:8082’;
    }
    if (oSession.isHTTPS) {
    // 修改协议,把 https 修改为 http ,因为局域网是http,https访问不到
    oSession.oRequest.headers.UriScheme = “http”
    }

  • 每日一条 :

    https://blog.csdn.net/weixin_41231928/article/details/107040880

    rebase和merge区别

fiddler直接将请求转发到本地

https://blog.csdn.net/qq_30285985/article/details/124094098 场景3

nodejs

所有node进程 pm2 list
停止进程 pm2 stop

nginx

个人配置文件举例

user  www www;
worker_processes auto;
error_log  /www/wwwlogs/nginx_error.log  crit;
pid        /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

http
    {
        include       mime.types;
		#include luawaf.conf;

		include proxy.conf;

        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
		limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

    #静态资源加  监听59661端口
        server{
                listen 59661;
                server_name 82.157.137.212;
                 root   /usr/local/company_note/;
                index  index.html index.htm;
      
        } 

server
    {
        listen 80;
        server_name 82.157.137.212;
        index index.html index.htm index.php;
        root  /www/wwwroot/my-admin-gin/web/dist;

        #error_page   404   /404.html;
        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }
location  /api {
        proxy_set_header Host $http_host;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        rewrite ^/api/(.*)$ /$1 break;  #重写
        proxy_pass http://127.0.0.1:45627; # 设置代理服务器的协议和地址
    }
        access_log  /www/wwwlogs/access.log;
    }
include /www/server/panel/vhost/nginx/*.conf;


}




K8S

pods和services区别

在这里插入图片描述

services中的ClusterIP和NodePort概念

在这里插入图片描述

k8s详细文档(参考用)

本地连接k8s集群
  1. 下载并使用kctcl连接工具,执行到第三步就不用再执行了,用kctcl --version验证下是否安装成功
  2. ktctl connect -n loveher 本地连接k8s集群指定nameSpace,命令需在管理员权限授权的cmd中进行
  3. kubectl get po -n loveher 可以在pods中看到多个kt-connect的工具
  4. kubectl get po,svc -n friend 获取k8s集群中的pods,其中 ClusterIP为serviceIp,具体概念去上方文档翻阅
    在这里插入图片描述
    4.上方步骤完成后,就可以用ClusterIP+端口访问对应的集群内的服务了
查看pod日志

k8s查看pod日志

查看k8s自定义配置
kubectl get secrets -n loveher
kubectl get secrets -n loveher yidun-secrets -oyaml

在这里插入图片描述
上方的是base64加密过的,需要base64解密后才是原文

平时idea启动不来的bug集合

  • java: 找不到符号 符号: 变量 log
    • https://www.cnblogs.com/cy0523/p/16292111.html
  • idea省电模式
    • https://blog.csdn.net/weixin_45787998/article/details/108781947

Mysql实验

mysql update某一行时,其他事务能查这一行的数据吗

结论: 能,但读的是之前没改过的数据

  1. 表结构
    在这里插入图片描述

  2. 开启一个事务a,执行更新操作

set autocommit=0;
update lock_learn set name='t' where id=1;
  1. 开启一个事务b,执行查询操作
select *from lock_learn where id=1;

查询结果
在这里插入图片描述

为什么上了写锁,别的事务还可以读操作?
因为InnoDB有MVCC机制(多版本并发控制),可以使用快照读,而不会被阻塞。

如果想在update 某行时,其他事务在读取此行时阻塞该怎么办呢?
可以在查询时加个读锁

多个线程执行插入操作为什么要比一个线程插入要快

一个线程执行插入操作时只会建立一个连接,但多个线程执行插入操作时会建立多个连接,这个过程可以通过processlist看到; 很明显建立连接的操作是由程序的第三方框架控制的,非自己

数据量插入耗时实验

MySQL安装在云服务器上,连接是在个人电脑windows上建立
单个线程插入循环插入1000条数据耗时1m多,如果连接是在云服务器本地建立的,这个过程可能会更快
在这里插入图片描述
但如果是批量插入的话耗时明显更少,连1s都不到,效率翻了60多倍,如果再加上多线程插入,效率还可以再翻个几倍,大概200倍是没问题的
在这里插入图片描述

小插曲-插入100w耗时测试

起了100个线程,每个线程只负责批量插入1w条数据,耗时统计大概5min,cpu最高彪30%,平均在10%; 之前只起了1个线程,插入1w数据,耗时14s; 理论上我开100个线程,插入100w数据也是14s才对,但结果看起来不是这样的,看来跟云服务器的硬件配置有关,及时我开00个线程,但云服务那边配置跟不上,也不行, 测试过程中MySQL的连接来到了100个,云服务器那边的监控在此
在这里插入图片描述

在这里插入图片描述

代码附带:

func main() {
	// 连接数据库
	// 自动迁移 schema
	db.AutoMigrate(&Test{})
	//统计耗时
	start := time.Now()
	var wg sync.WaitGroup
	for i := 0; i < 100; i++ {
		wg.Add(1)
		go insert(db,1000,10,&wg)
	}
	wg.Wait()
	print("多线程100个线程批量插入100w条数据耗时:" + time.Since(start).String() + "")
	fmt.Println("插入成功")
}
func insert(db *gorm.DB,limit int,loopOut int,wg *sync.WaitGroup){
	defer wg.Done()
	users:=make([]Test,limit*loopOut)
	for i := 0; i < loopOut*limit; i++ {
		// 批量创建记录
		users[i]=Test{Name: "test", CreateTime: time.Now()}
	}
	db.Create(&users)
}
60w的数据量大概处理效率

在这里插入图片描述
MySQL在云端,表的列仅这三列,数据硬盘存储大概占用7.9mb,本地导出这些数据大概耗时24s

编程语言线程实验

配置16g,测试最大开启线程/协程数
java可以开启到4000多条(验证过的),go可以开启到100w条(未验证)

第三方的一些补充

前置相关

  • 一个开放平台可以添加多个公众号,小程序,网站或APP应用,每添加一个应用,就会给一个AppID
OpenID

只跟应用关联,不同应用的用户OpenID不一样

UnionId

跟开放平台关联,同一开放平台下不同应用的用户UnionID一样;如果换了一个新的开放平台,那新开放平台下不同应用的用户UnionID则就不一样

arthas使用

  1. 项目中加入arthas
  2. 使用插件拿到watch命令,进入arthas
docker exec -it nuannuan-app-server /bin/bash
cd /opt/arthas
java -jar arthas-boot.jar
  1. 选择附加JAVA进程,使用完毕后记得使用stop还原JAVA附加类

CDN

工作原理
在这里插入图片描述

CDN针对动态内容的效果,如接口

在这里插入图片描述

CDN可能会变更用户的IP地址

在这里插入图片描述

CDN缓存及刷新相关问题

在这里插入图片描述

wps高级筛选

筛选出想要的列

此处我想要筛选出’ip属地’ 不为中国的行
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

之后点击确定,就行了

OllyDbg

OllyDbg转到指定地址代码行快捷键
ctrl+g

在这里插入图片描述

OllyDbg回到主界面
左下方点击m2

在这里插入图片描述

OllyDbg查看指定内存的数值

在内存查看窗口 鼠标右键->查找->地址
在这里插入图片描述

在这里插入图片描述

OllyDbg添加注释

鼠标右键,点击注释
在这里插入图片描述

OllyDbg跳转到注释过的地方

鼠标右键->查找->定义的注释
在这里插入图片描述
在这里插入图片描述

CE

分析经验

眼见不一定为实,需要验证

  • 比如cs1.6中,界面上显示的金钱数其实并不是真正的金钱数,真正的金钱数值和显示数值是分开存储的,因此当我们找出疑似的一堆数据时,先把这堆数据锁定,看是否是真正的数值

找基址
若是存在1级或更高级偏移,如下图思路

在这里插入图片描述
先找到基址,再通过基址获取基址上的地址,这张图里是1级偏移,获取地址后再加上偏移量就得到真正数据的地址啦

内存区域分析

在这里插入图片描述
显示格式: 从上至下地址间相差32字节,从左往右以此相差4字节,上边的D1,D5是以第一行地址显示的,假设第一行地址换成 22223BDC4F1,那D1,D5就会显示为F1,F5这样的

  • 22223BDC4D1-22223BDC4F1=32(DEC格式)
  • D5-D1=4(DEC格式)

从区域图里也可以看到一个英文字符占一个字节,比如test1字符占据了22223BDC651-22223BDC655这段内存,用了8个字节内存

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值