tomcat开启远程debug

前言

测试环境的问题在本地复现不出来,最直接的办法就是远程 debug:本地 IDEA 打断点,连到测试环境的 tomcat 上单步跟。配置很简单,给 catalina 加一段 JDWP 参数就行,但有个 shutdown.sh 失效的坑要提前知道。

1、配置方法

linux 下在 catalina.sh 开头(或者按规范放 bin/setenv.sh)加:

1
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888"

windows 下修改 catalina.bat:

1
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888

参数含义:

……

阅读全文

SpringMVC全局token防止重复提交

前言

表单重复提交是老问题:用户手快点了两下提交、网络卡顿刷新重发,数据就插了两条。最常见的解法是提交完成后 redirect 跳转,但它解决不了 ajax 提交和移动端提交的场景(没有页面可跳)。通行的做法是用 token:django 等框架内置了这套机制,SpringMVC 需要自己搭,这篇把完整实现整理出来(思路参考了网上的经典方案,见文末参考)。

……

阅读全文

python工具-移除照片或视频背景

前言

BackgroundRemover是一个命令行工具,用于从视频 和图像中删除背景

1、依赖

Requirements
python <= 3.6
python3.6-dev #or what ever version of python you using
torch and torchvision stable version https://pytorch.org
ffmpeg 4.4+

1
2
3
pip install python3.6-dev
pip install ffmpeg
pip install torch

2、安装

1
pip install backgroundremover

3、下载模型并设置

如果不提前下载模型的话,在首次执行的时候会自动下载,但是需要从 google 网盘下载,因此需要有翻墙能力。
如果手工下载可以参考下面地址:
1、https://github.com/xuebinqin/U-2-Net#usage-for-salient-object-detection,参考章节"Download the u2net_portrait.pth"
2、https://pan.baidu.com/s/1FbUIBJsEua7G1vYo06lSmg 提取码: o0uu
3、https://drive.google.com/u/0/uc?id=1rbSTGKAE-MTxBYHd-51l2hMOQPT_7EPy&export=download

……

阅读全文

springboot的devTools热部署

前言

springboot利用devtools实现热部署

1、application.yml

1
2
3
4
5
6
7
8
9
spring:
    devtools:
        restart:
            #热部署生效
          enabled: true
            #设置重启的目录
            #additional-paths: src/main/java
            #classpath目录下的WEB-INF文件夹内容修改不重启
          exclude: WEB-INF/**

设置WEB-INF下的jsp修改不需要重启。

2、pom.xml

1
2
3
4
5
6
7
8
<!--devtools热部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖该项目的项目如果想要使用devtools,需要重新引入 -->
    <scope>true</scope>
</dependency>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
      <fork>true</fork>
    </configuration>
    <dependencies>
      <!-- spring热部署-->
      <!-- https://mvnrepository.com/artifact/org.springframework/springloaded -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>springloaded</artifactId>
        <version>1.2.6.RELEASE</version>
      </dependency>
    </dependencies>
</plugin>

3、idea设置

1、File-Settings-Compiler-Build Project automatically
2、ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

……

阅读全文

nginx参数介绍

前言

nginx的反向代理和当做前端容器使用比较广泛,有一些参数详情搜集整理下

1、Nginx运行工作进程数量

Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。
如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件

1
grep ^processor /proc/cpuinfo | wc -l 
1
2
3
4
5
6
7
8
9
[root@lx~]# vi /usr/local/nginx1.10/conf/nginx.conf
worker_processes 4;
[root@lx~]# /usr/local/nginx1.10/sbin/nginx-s reload
[root@lx~]# ps -aux | grep nginx |grep -v grep
root 9834 0.0 0.0 47556 1948 ?     Ss 22:36 0:00 nginx: master processnginx
www 10135 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process
www 10136 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process
www 10137 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process
www 10138 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process

2、Nginx运行CPU亲和力

比如4核配置:

……

阅读全文

linux的一些细节点-不定期补充

前言

linux的一些小细节记录

1、tmp目录、var目录自动清理

tmp下的文件或目录长时间没有更新或者改动的话,systemd-tmpfiles 会按配置定期清理,配置参考如下:

1
vi /usr/lib/tmpfiles.d/tmp.conf
1
2
3
4
5
6
7
8
9
# Clear tmp directories separately, to make them easier to override  
v /tmp 1777 root root 90d  
v /var/tmp 1777 root root 90d  

# Exclude namespace mountpoints created with PrivateTmp=yes  
x /tmp/systemd-private-%b-*  
X /tmp/systemd-private-%b-*/tmp  
x /var/tmp/systemd-private-%b-*  
X /var/tmp/systemd-private-%b-*/tmp

2、tcp连接数统计

1
2
3
4
5
6
7
netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'

TIME_WAIT 1
FIN_WAIT2 1
ESTABLISHED 34
LAST_ACK 1
LISTEN 23

注:netstat 属于已停止维护的 net-tools 套件,新发行版推荐用 ss 等价替代:ss -ant | awk 'NR>1 {++S[$1]} END {for(a in S) print (a,S[a])}'。

……

阅读全文

被同事误删表找回丢失的数据

有些不靠谱的同事真的很误事,运维了几年的系统从来没出过误删表数据的事件,3月14日下午突然被同事误删了订单表全量数据,查询表返回0 rows,突然大脑一片空白,心想完了完了,最重要的表数据全部被清理了,虽然有每日凌晨5点的全量备份,但是截止下午的数据怎么找回?从来没碰到过误删事件,也从来没处理过数据恢复……

一、先挽救每日备份的数据

找到每日全量备份的数据,把订单表还原到测试库,然后单独把订单表重新备份,针对误删的表进行全量恢复 采用的工具是mydumper,非mysql官方的mydump 心想:好在有每日凌晨5点的全量备份,虽然在自己手里,从开发了每日全量备份脚本并配置定时任务每天执行,从来没派上用场,也希望不会派上用场,但是良好的备份意识还是挽救了90%的数据。 半小时左右,90%的数据恢复,然后把问题上报。

……

阅读全文

JDK1.8.0.161版本bug定位

前言

好好运行的系统,突然故障,无意间根据错误信息查找,竟然是jdk的bug,描述下曲折的定位过程。

1、错误日志

有个老系统有使用到soap接口,采用CXF结合接口文件wsdl自动生成的接口开发的,突然在3月2日(后续日志定位才发现真正故障的时间)无法正常工作,但是实际发现时间已经到了3月6日了,直接查看日志文件,报错“组装saop报文头异常:Entity References are not allowed in SOAP documents”

……

阅读全文

linux小技巧:文件句柄排查与乱码文件名删除

前言

攒了几个 linux 小技巧,单独发太碎,合在一起记录:文件句柄占用排查(句柄打满的锅十有八九是它)、TIME_WAIT 过多的内核参数、还有删除乱码文件名文件。

1、文件句柄排查

服务报 Too many open files 的时候,先找到是谁把句柄吃光的:

1
2
3
4
5
# 按进程统计打开的文件句柄数量,倒序
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | more

# 拿到进程号后再确认是什么进程
ps -aef | grep 进程号

调大句柄上限,root 登录:

……

阅读全文

广告计费术语扫盲:CPA/CPS/CPM/CPT/CPC

前言

做后台系统或数据报表时经常碰到广告投放侧的术语:CPA、CPS、CPM、CPT、CPC。五个缩写长得像,区别全在「按什么付费」。这篇一次讲清——按付费锚点从「展示」到「成交」排列,正好是一条转化漏斗。

一、五种计费模式

CPM(Cost Per Mille,每千人成本):按展示付费,只要展示了广告主的广告内容,每满一千次曝光就计一次费。品牌广告主用得最多——他们买的是「让更多人看到」。

……

阅读全文

最近文章

分类

标签

其它