likes
comments
collection
share

常用操作合集七

作者站长头像
站长
· 阅读数 27

写在前面

在工作中,我们可能会遇到一些问题,然后通过自己得一顿操作,最终把问题解决了。

可能在一两天之内,我们还是会记得解决这些问题的方法,但是过了一段时间之后,基本上都忘光了。

所以这里,我们应该要养成一个良好的习惯,把每次遇到的问题,如何解决的,都记录下。下次再看文档,这样就想起来了。

<<千与千寻>>有些事情是不可能忘记的,只是一时想不起来

下面,就分享一下,我遇到的一些问题,和相关的解决方法。

1.根据进程 PID 找到进程启动目录、二进制、日志位置等信息

#查找进程pid
ps -aux|grep jenkins

#进入到进程目录
cd /proc/2401 #(带上进程pid)

常用操作合集七

更多详情,可以参考这里:/proc/pid目录详解

2.定时写一个shell脚本,按日期切割nohup.out日志内容

#!/bin/bash

cd /opt/jxbp

# 设置切割文件的前缀和存放目录
NAME=$(basename $(basename "*.out")  .out)
PREFIX="/opt/jxbp/*.out"
DATE=$(date +%Y%m%d)
OUTPUT_DIR="/opt/jxbp/log"
LOGFILE="${OUTPUT_DIR}/${NAME}-${DATE}.log"

# 检查目录是否存在,不存在则创建
mkdir -p "$OUTPUT_DIR"

# 将nohup.out的当前内容追加到新的日志文件中
tail -n +1 *.out >> "$LOGFILE"

# 清空.out文件
> ${NAME}.out

# (可选)如果你希望保留一定天数的日志,可以添加删除旧日志的逻辑
# 例如,保留最近7天的日志
find "$OUTPUT_DIR" -name "${NAME}-*.log" -type f -mtime +7 -delete

添加该shell脚本,到定时器任务中:

echo "*/1 * * * * /opt/llxydn/logback.sh" | crontab -

3.vue-devtools下载

blog.csdn.net/weixin_5991…

4.mysql排序字段重复,导致分页出现重复数据问题

如果多行在 order by 列中具有相同的值,则服务器可以自由地以任何顺序返回这些行,并且可能会根据整体执行计划以不同的方式返回这些行。换句话说,这些行的排序顺序相对于无序列来说是不确定的。

例如:

--对age进行排序
select * from user order by age limit 0,10

--当age出现重复数据的时候,分页后,可能第1页出现的数据,会在第二页重复出现
select * from user order by age limit 10,10

解决方法:

  • 方法一:给排序字段添加索引
create index user_age_idx on user(age);
  • 方法二:在order by子句中加入具有唯一性的列
-- asc升序
select * from user order by age,id asc limit 0,10

-- desc降序
select * from user order by age desc ,id limit 0,10

id是自增字段

5.达梦数据库修改字段类型

-- 增加一个新字段
alter table FORM_CUSTOM_QUERY add SQL_1 clob;

-- 将旧字段的数据先更新到新字段中(注:如果你表中没数据,这步可以不用做)
update FORM_CUSTOM_QUERY set SQL_1 = SQL_;

-- 删除旧字段
alter table FORM_CUSTOM_QUERY drop column SQL_;

-- 将新字段改名为旧字段
alter table FORM_CUSTOM_QUERY rename column SQL_1 to SQL_;

6.统计公司网站(nginx)用户城市分布

使用到Maxmind的客户端库, libmaxminddb的github地址, 可以下载源码进行编译安装,用于读取Maxmind数据库文件,将ip解析出对应的地理位置,通过地理位置就可拿到城市等信息。

需要到Maxmind官网下载地理位置数据库文件,GeoLite2-City.mmdb

对nginx的日志文件access.log进行解析。

创建shell脚本文件: nginx_log_geoip.sh

#!/bin/bash

log_file="./access.log"
geoip_file="./GeoLite2-City.mmdb"
result_file="./result.log"

while read LINE; do
    ip=$(echo $LINE | awk '{print $1}')
    mmdblookup --file $geoip_file --ip "$ip" city names zh-cN 2>/dev/null
    | awk -F'"' '{print $2}' >> $result_file
done < $log file

grep -Ev "^$" $result_file | sort | uniq -c | sort -k1 -nr

该shell脚本解析如下:

log_file为 nginx日志文件路径

geoip_file为 Maxmind的地理位置对应城市的数据库文件

result_file为 输出结果文件

while,循环遍历nginx日志文件每一行,进客户端ip提取出来,使用mmdblookup获得ip对应的城市,输出到结果文件

grep,使用grep过滤出非空行的城市,通过sort进行排序,通过uniq -c去重统计次数,再用sort k1对于次数做一个排序

nginx对应访问日志格式如下:

常用操作合集七

7.基于nginx实现灰度上线系统

  • 1.基于权重的流量切分

nginx将用户流量按比例转发到新版本,一旦新版本验证通过,再将流量切换到新版本。

使用upstream配置权重即可。

upstream webservers{
    server 192.168.0.1 weight=9;
    server 192.168.0.2 weight=1;
}

常用操作合集七

  • 2.基于客户端请求的流量切分

nginx通过获取客户端携带的cookie或者http请求头或者指定的键值对,来去将流量转发到新版本,一旦新版本验证通过,再将流量切换到新版本。 2.基于客户端请求的流量切分

nginx通过获取客户端携带的cookie或者http请求头或者指定的键值对,来去将流量转发到新版本,一旦新版本验证通过,再将流量切换到新版本。

set $backend "webservers"

#当客户端携带的cookie,包含canary=yes键值对,将backend设置为灰度版本
if($http_cookie ~* "canary=yes"){
    set $backend "webservers-canary"
}

location / {
    proxy_pass http://$backend; #这里使用动态值
}

常用操作合集七

8.如何提升Springboot的启动速度?

  • 1.延迟初始化

使用延迟初始化方式,让bean在被真正使用的时候,才进行初始化。

可以在application.yml加上下面的配置:

spring:
  main:
    lazy-initialization: true

spring.main.lazy-initialization的值更改为true,默认为false

  • 2.使用Spring Context Indexer功能

使类扫描时,避免类过多而导致扫描速度过慢问题

在pom.xml依赖中,加上下面的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-indexer</artifactId>
        <version>5.1.12.RELEASE</version>
        <optional>true</optional>
    </dependency>
</dependencies>

然后在启动类加上@Indexed注解,当程序编译打包时,会自动生成META-INT/spring.components文件。

当Spring应用上下文执行ComponentScan扫描时,META-INT/spring.components将会被CandidateComponentsIndexLoader 读取并加载,转换为CandidateComponentsIndex对象,这样的话@ComponentScan不在扫描指定的package,而是读取CandidateComponentsIndex对象,从而达到提升性能的目的。

  • 3.可以通过关闭JMX,来提升速度

JMX是Java平台的管理和监控标准,一些情况下我们希望禁用JMX以确保应用程序的安全性或避免性能问题,如果我们不需要这些监控,可以手动关闭JMX。

可以在application.yml加上下面的配置:

spring:
  jmx:
    enabled: false

好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下,再走呗!!!

常用操作合集七

转载自:https://juejin.cn/post/7375083022612480034
评论
请登录