JiaHe

相遇即是缘

原文地址

什么是内存碎片?

你可以将内存碎片简单地理解为那些不可用的空闲内存。

举个例子:操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片。

内存碎片

Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗。

阅读全文 »

性能状态关键指标

  • QPS,Queries Per Second:每秒查询数,一台数据库每秒能够处理的查询次数

  • TPS,Transactions Per Second:每秒处理事务数

  • Uptime:服务器已经运行的实际,单位秒

  • Questions:已经发送给数据库查询数

  • Com_select:查询次数,实际操作数据库的

  • Com_insert:插入次数

  • Com_delete:删除次数

  • Com_update:更新次数

  • Com_commit:事务次数

  • Com_rollback:回滚次数

-- 58228968
show global status like 'Questions';

-- 55155
show global status like 'Uptime';

-- QPS = Questions / Uptime
-- 1055 = 58228968 / 55155

-- 7689868
show global status like 'Com_commit';

-- 7737499
show global status like 'Com_rollback';

-- TPS = (Com_commit + Com_rollback) / Uptime
-- 280 = ( 7689868 + 7737499 ) / 55155

-- Com_delete 609
-- Com_insert 30627
-- Com_select 23580917
-- Com_update 3549397
show global status where Variable_name in('com_select','com_insert','com_delete','com_update');
SELECT SLEEP(1);
-- Com_delete 609
-- Com_insert 30629
-- Com_select 23583220
-- Com_update 3549478
show global status where Variable_name in('com_select','com_insert','com_delete','com_update');

-- ( (609 - 609) + (30629 - 30627) + (3549478 - 3549397) ) = 83
-- ( 23583220 - 23580917 ) = 2303

转载:Spring 5 AOP 默认改用 CGLIB 了?从现象到源码的深度分析

Spring5 AOP 默认使用 Cglib 了?我第一次听到这个说法是在一个微信群里:

真的假的?查阅文档

刚看到这个说法的时候,我是保持怀疑态度的。

大家都知道 Spring5 之前的版本 AOP 在默认情况下是使用 JDK 动态代理的,那是不是 Spring5 版本真的做了修改呢?于是我打开 Spring Framework 5.x 文档,再次确认了一下:

文档地址:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/core.html#aop

Spring Framework 5.x 文档

简单翻译一下。Spring AOP 默认使用 JDK 动态代理,如果对象没有实现接口,则使用 CGLIB 代理。当然,也可以强制使用 CGLIB 代理。

阅读全文 »

linux系统下,进程对信号的默认响应方式有5种:

1) 忽略信号,即当做没收到信号一样;

2) 终止进程;

3) 产生核心转储文件,同时进程终止;

4) 停止进程,即暂停进程的执行;

5) 于之前的暂停之后恢复执行;

处理方式2和3都会导致进程终止执行并立即退出,处理方式1、4、5不会造成进程终止执行。

因此,可以将信号粗略的分为两类,一类是会导致进程终止并退出的信号;另一类则是不会导致进程终止并退出的信号。

当进程因收到信号被终止执行退出后,父进程可以通过调用wait或waitpid得到它的exit code。

进程被各信号终止的退出状态码总结如下:

阅读全文 »

/usr/lib/systemd/system/server_name.service
[Unit]
Description=This is a service.
After=network.target

[Service]
Type=forking
User=root
# 服务主目录
WorkingDirectory=/usr/local/server_name
Restart=on-failure
# 重启间隔,服务异常退出后,等待多少秒再启动
RestartSec=30s
# 限制启动间隔,当为0时,表示不限重启次数
StartLimitInterval=0
RestartPreventExitStatus=SIGKILL
ExecStart=/bin/sh 启动命令
ExecStop=/bin/sh 停止命令

[Install]
WantedBy=multi-user.target