因为运维告知每隔一两个月就会有一次因为redis连接数超了导致的系统崩溃,排查过程顺带记录可用信息
找运维表示系统问题第一时间处理,也没看到有日志的情况,秉承一贯谁说的我都不信的原则,先从redis的现状查起,从内存到连接数,到完整参数,列举如下
1.info memory
查看Redis进程内消耗主要包括:自身内存+对象内存+缓冲内存+内存碎片
2.CONFIG GET maxclients
查看允许的最大连接数
3.info clients
查看当前连接数
4.info all
查看全部

Server

redis_version:5.0.5 //Redis服务器的版本
redis_git_sha1:00000000 //Git SHA1
redis_git_dirty:0 //Git dirty flag
redis_build_id:cdff23e4497417f9 //构建ID
redis_mode:cluster //Redis启动模式:standalone、Sentinel、Cluster
os:Linux 4.4.0-143-generic x86_64 //redis宿主机操作系统
arch_bits:64 //架构:32位、64位
multiplexing_api:epoll //事件循环机制
atomicvar_api:atomic-builtin //Atomicvar API
gcc_version:5.4.0 //编译 Redis 时所使用的 GCC 版本
process_id:41450 //进程PID
run_id:7c1db72b9f235c5e52780aeb8817fd272230f1bc //标识Redis服务器的唯一随机值,由Sentinel和Cluster使用
tcp_port:6379 //TCP、IP侦听端口
uptime_in_seconds:129723 //自Redis服务器启动以来的秒数
uptime_in_days:1 //自Redis服务器启动以来的天数
hz:10 //调度serverCron每秒运行次数
configured_hz:10 //
lru_clock:10612903 //以分钟为单位进行自增的时钟,用于 LRU 管理
executable:/usr/local/redis5.0/bin/redis-server //服务器可执行文件的路径
config_file:/usr/local/redis5.0/6379/redis6379.conf //启动 redis 配置文件

Clients

connected_clients:1 //已连接客户端的数量(不包括通过从服务器连接的客户端)
client_recent_max_input_buffer:2 //当前连接的客户端当中,最大输入缓存
client_recent_max_output_buffer:0 //当前连接的客户端当中,最长的输出列表
blocked_clients:0 //正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量

Memory

used_memory:2660408 //由 redis 分配器(标准libc,jemalloc或其他分配器,例如tcmalloc)分配的内存总量,以字节(byte)为单位
used_memory_human:2.54M //以可读的格式返回 redis 分配的内存总量
used_memory_rss:9154560 //从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top、ps 等命令的输出一致。
used_memory_rss_human:8.73M //以可读的格式,操作系统角度,返回 redis 分配的内存总量
used_memory_peak:204081928 //redis 的内存消耗峰值(以字节为单位)
used_memory_peak_human:194.63M //以可读的格式,返回 Redis 的内存消耗峰值
used_memory_peak_perc:1.30% //used_memory_peak在used_memory中所占的百分比,即(used_memory / used_memory_peak) *100%
used_memory_overhead:2565048 //分配用于管理其内部数据结构的所有开销的总字节数,即维护数据集的内部机制所需的内存开销,包括所有客户端输出缓冲区、查询缓冲区、AOF重写缓冲区和主从复制的backlog
used_memory_startup:1449744 //启动时消耗的初始内存量(以字节为单位)
used_memory_dataset:95360 //数据集的大小(以字节为单位,used_memory - used_memory_overhead)
used_memory_dataset_perc:7.88% //used_memory_dataset在净内存(used_memory-used_memory_startup)使用量中所占的百分比
allocator_allocated:2770640 //分配器分配的内存
allocator_active:3371008 //分配器活跃的内存
allocator_resident:11554816 //分配器常驻的内存
total_system_memory:1021468672 //主机拥有的内存总量
total_system_memory_human:974.15M //以可读的格式返回主机拥有的内存总量
used_memory_lua:37888 //Lua引擎使用的字节数
used_memory_lua_human:37.00K //以可读的格式返回Lua引擎使用内存
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0 //配置设置的最大可使用内存值,默认0,不限制
maxmemory_human:0B //以可读的格式返回最大可使用内存值
maxmemory_policy:noeviction //内存容量超过maxmemory后的处理策略,noeviction当内存使用达到阈值的时候,所有引起申请内存的命令会报错
allocator_frag_ratio:1.22 //分配器的碎片率
allocator_frag_bytes:600368 //分配器的碎片大小(以字节为单位)
allocator_rss_ratio:3.43 //分配器常驻内存比例
allocator_rss_bytes:8183808 //分配器的常驻内存大小(以字节为单位)
rss_overhead_ratio:0.79 //常驻内存开销比例
rss_overhead_bytes:-2400256 //常驻内存开销大小(以字节为单位)
mem_fragmentation_ratio:3.50 //内存碎片率,used_memory_rss 和 used_memory 之间的比率
mem_fragmentation_bytes:6536432 //内存碎片的大小(以字节为单位)
mem_not_counted_for_evict:0 //被驱逐的大小
mem_replication_backlog:1048576 //repl_backlog
mem_clients_slaves:16922 //clients_slaves
mem_clients_normal:49694 //clients_normal
mem_aof_buffer:0 //aof时,占用的缓冲
mem_allocator:jemalloc-5.1.0 //内存分配器(在编译时选择)
active_defrag_running:0 //碎片整理是否处于活动状态
lazyfree_pending_objects:0 //等待释放的对象数(由于使用ASYNC选项调用UNLINK或FLUSHDB和FLUSHALL)

Persistence

loading:0 //记录服务器是否正在载入持久化文件
rdb_changes_since_last_save:0 //最近一次成功创建持久化文件之后,产生操作的次数
rdb_bgsave_in_progress:0 //记录了服务器是否正在创建 RDB 文件
rdb_last_save_time:1570890961 //最近一次成功创建 RDB 文件的 UNIX 时间戳
rdb_last_bgsave_status:ok //记录最近一次创建 RDB 文件的状态,是成功还是失败
rdb_last_bgsave_time_sec:0 //记录了最近一次创建 RDB 文件耗费的秒数
rdb_current_bgsave_time_sec:-1 //如果正在创建 RDB 文件,记录当前的创建操作已经耗费的秒数
rdb_last_cow_size:249856 //上一次RBD保存操作期间写时复制的大小(以字节为单位)
aof_enabled:1 //AOF是否开启
aof_rewrite_in_progress:0 //记录了是否正在创建 AOF 文件
aof_rewrite_scheduled:0 //记录了 RDB 文件创建完毕之后,是否需要执行 AOF 重写操作
aof_last_rewrite_time_sec:0 //最近一次创建 AOF 文件耗费的秒数
aof_current_rewrite_time_sec:-1 //如果正在创建 AOF 文件,那么记录当前的创建操作耗费的秒数
aof_last_bgrewrite_status:ok //记录了最近一次创建 AOF 文件的状态,是成功还是失败
aof_last_write_status:ok //AOF的最后写入操作的状态,是成功还是失败
aof_last_cow_size:307200 //上一次AOF保存操作期间写时复制的大小(以字节为单位)
aof_current_size:115 //AOF 文件当前的大小
aof_base_size:115 //最近一次启动或重写时的AOF文件大小
aof_pending_rewrite:0 //记录了是否有 AOF 重写操作在等待 RDB 文件创建完毕之后执行
aof_buffer_length:0 //AOF缓冲区的大小
aof_rewrite_buffer_length:0 //AOF 重写缓冲区的大小
aof_pending_bio_fsync:0 //后台 I/O 队列里面,等待执行的 fsync 数量
aof_delayed_fsync:0 //被延迟的 fsync 调用数量,如果该值比较大,可以开启参数:no-appendfsync-on-rewrite=yes

如果正在进行加载操作,会有以下状态:
loading_start_time: //加载操作开始的时间戳
loading_total_bytes: //加载文件总大小
loading_loaded_bytes: //已加载的字节数
loading_loaded_perc: //已加载的百分比
loading_eta_seconds: //完成加载所需的秒数(以秒为单位)

Stats

total_connections_received:11046 //服务器接受的连接总数
total_commands_processed:2086515 //服务器已执行的命令数量
instantaneous_ops_per_sec:0 //服务器每秒钟执行的命令数量
total_net_input_bytes:116217212 //启动以来,流入的字节总数
total_net_output_bytes:161658834 //启动以来,流出的字节总数
instantaneous_input_kbps:0.02 //接收输入的速率(每秒)
instantaneous_output_kbps:0.00 //输出的速率(每秒)
rejected_connections:0 //由于maxclients限制而被拒绝的连接数
sync_full:1 //与slave full sync的次数
sync_partial_ok:14 //接受的部分重新同步(psync)请求的数量
sync_partial_err:1 //被拒绝的部分重新同步(psync)请求的数量
expired_keys:0 //key过期事件总数
expired_stale_perc:0.00 //过期的比率
expired_time_cap_reached_count:0 //过期计数
evicted_keys:0 //由于最大内存限制而被驱逐的key数量
keyspace_hits:1057312 //key命中次数
keyspace_misses:38734 //key未命中次数
pubsub_channels:0 //发布/订阅频道的数量
pubsub_patterns:0 //发布/订阅的模式数量
latest_fork_usec:1460 //最近一次 fork() 操作耗费的毫秒数(以微秒为单位)
migrate_cached_sockets:0 //为迁移而打开的套接字数
slave_expires_tracked_keys:0 //跟踪过期key数量(仅适用于可写从)
active_defrag_hits:0 //活跃碎片执行的值重新分配的数量
active_defrag_misses:0 //活跃碎片执行的中止值重新分配的数量
active_defrag_key_hits:0 //活跃碎片整理的key数
active_defrag_key_misses:0 //活跃碎片整理过程跳过的key数

Replication

role:master //角色(master、slave),一个从服务器也可能是另一个服务器的主服务器
connected_slaves:1 //连接slave实例的个数
slave0:ip=192.168.163.132,port=6382,state=online,offset=64547142,lag=1 //连接的slave的信息
master_replid:1726c598c37f039c4b69db7a4281392a650eb88b //服务器的复制ID
master_replid2:0000000000000000000000000000000000000000 //第二服务器复制ID,用于故障转移后的PSYNC,用于集群等高可用之后主从节点的互换
master_repl_offset:64547142 //复制偏移量1
second_repl_offset:-1 //第二服务器复制偏移量2
repl_backlog_active:1 //复制缓冲区状态
repl_backlog_size:1048576 //复制缓冲区的大小(以字节为单位)
repl_backlog_first_byte_offset:63498567 //复制缓冲区的偏移量,标识当前缓冲区可用范围
repl_backlog_histlen:1048576 //复制缓冲区中数据的大小(以字节为单位)

如果是从节点,会有以下状态:

master_host:192.168.163.132 //Master IP
master_port:6379 //Master Port
master_link_status:up //Master的连接状态(up/down)
master_last_io_seconds_ago:8 //最近一次主从交互之后的秒数
master_sync_in_progress:0 //表示从服务器是否一直在与主服务器进行同步
slave_repl_offset:64547142 //复制偏移量
slave_priority:100 //从服务器的优先级
slave_read_only:1 //从服务是否只读

如果正在进行SYNC操作,会有以下状态:

master_sync_left_bytes: //同步完成前剩余的字节数
master_sync_last_io_seconds_ago: //自SYNC操作以来最后一次传输I/O经过的秒数

如果主服务器和副本服务器之间的链接断开,会有以下状态:

master_link_down_since_seconds: //主从连接断开后经过的秒数
connected_slaves: //已连从的数量

如果服务器配置(的Redis 5)有min-slaves-to-write(或以min-replicas-to-write)指令,会有以下状态:

min_slaves_good_slaves: //当前认为良好的副本数,对于每个副本,添加以下行:
slaveXXX: id, IP address, port, state, offset, lag

CPU

used_cpu_sys:133.908000 //消耗的系统CPU
used_cpu_user:70.692000 //消耗的用户CPU
used_cpu_sys_children:0.016000 //后台进程占用的系统CPU
used_cpu_user_children:0.044000 //后台进程占用的用户CPU

Commandstats //提供基于命令类型的统计信息,包括调用次数,这些命令消耗的总CPU时间以及每个命令执行消耗的平均CPU时间。

cmdstat_cluster:calls=33169,usec=3835426,usec_per_call=115.63
cmdstat_keys:calls=3,usec=7828,usec_per_call=2609.33
cmdstat_get:calls=1096046,usec=914358,usec_per_call=0.83
cmdstat_set:calls=872138,usec=984030,usec_per_call=1.13
cmdstat_monitor:calls=6,usec=4,usec_per_call=0.67
cmdstat_replconf:calls=74181,usec=103173,usec_per_call=1.3
cmdstat_client:calls=11,usec=2812,usec_per_call=255.64
cmdstat_flushdb:calls=2,usec=23058,usec_per_call=11529.00
cmdstat_dbsize:calls=22,usec=27,usec_per_call=1.23
cmdstat_auth:calls=10883,usec=19716,usec_per_call=1.81
cmdstat_info:calls=14,usec=6987,usec_per_call=499.07
cmdstat_config:calls=9,usec=5819,usec_per_call=646.56
cmdstat_psync:calls=15,usec=4288,usec_per_call=285.87
cmdstat_command:calls=16,usec=98434,usec_per_call=6152.12

Cluster

cluster_enabled:1 //是否开启集群模式

Keyspace //键空间部分提供有关每个数据库的统计信息。 统计信息是键的数量,以及带有到期时间的键的数量。

db0:keys=2,expires=0,avg_ttl=0

下载extjs必须的环境安装包,cmd、extjs-sdk
extjs目录下,进入templates目录,可以看到admindashboard模板,在项目外层目录直接基于模板创建项目:
sencha --sdk=/Volumes/Data/Projects/extjs-project/ext-7.5.0 generate app -s /Volumes/Data/Projects/extjs-project/ext-7.5.0/templates/admin-dashboard chengezhao cez-v2-frontend
创建完项目如果出现:
@theme-background-image: Theme image not found
是因为模板app.json文件的路径问题没有更新,将下列代码进行修改

"output": {
    "base": "${ext.dir}/build/examples/admin-dashboard/${build.id}",
    "page": "../index.html",
    "manifest": "../${build.id}.json",
    "appCache": {
        "enable": false
    }
},

修改为:

"output": {
    "base": "${workspace.build.dir}/${build.environment}/${app.name}",
    "page": "index.html",
    "manifest": "${build.id}.json",
    "js": "${build.id}/app.js",
    "appCache": {
        "enable": false
    },
    "resources": {
        "path": "${build.id}/resources",
        "shared": "resources"
    }
},

进入项目目录cez-v2-frontend,运行:
sencha app watch
即可启动项目

3589 brew list php
3590 brew info php74
3591 brew info php@74
3592 brew info php@7.4
3593 brew services stop php@7.3
3594 brew services start php@7.4
3595 php -v
3596 composer install
3597 composer upgrade
3598 composer install
3599 cd /Users/wayson/Documents/coe/dataadmin
3600 clear
3601 php -v
3602 brew install php74
3603 brew install php@7.4
3604 echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc
3605 echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc
3606 export LDFLAGS="-L/usr/local/opt/php@7.4/lib"
3607 export CPPFLAGS="-I/usr/local/opt/php@7.4/include"
3608 brew services restart php@7.4
3609 php -v
3610 source
3611 source LDFLAGS
3612 brew info php@7.4
3613 /usr/local/etc/php/7.4/
3614 php -v
3615 cd
3616 php -v
3617 brew unlink php73
3618 brew unlink php@7.3
3619 brew link php@7.4
3620 php -v

将证书下载下来,两个文件传上服务器,放在方便自己管理的地方
修改nginx配置文件,添加下面的配置:

以下属性中,以ssl开头的属性表示与证书配置有关。

server {

listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/cert-file-name.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
    root html;  #站点目录。
    index index.html index.htm;
}

}

如果需要让http自动跳转https,可以配置:

server {

listen 80;
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location / {
    index index.html index.htm;
}

}

配置完成重载nginx配置:
cd /usr/local/nginx/sbin #进入Nginx服务的可执行目录。
./nginx -s reload #重新载入配置文件。

如果是非nginx服务配置ssl的,可以参考阿里的文档:
https://help.aliyun.com/document_detail/198938.html

直接安装需要的版本:
brew install openjdk@8
查看安装位置:
brew info openjdk@8
修改环境变量:
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home"
如果使用zsh,执行:
source ~/.zshrc
查看当前java
java -version

我的本地环境是mac,用homebrew安装,后期使用比直接用官网安装包安装来的方便:
brew install postgresql
brew install slowhttptest
brew services start postgresql
initdb /usr/local/var/postgres
sudo chmod 775 /usr/local/var/postgres
sudo chown wayson /usr/local/var/postgres
initdb /usr/local/var/postgres
rm -rf /usr/local/var/postgres
initdb /usr/local/var/postgres
pg_ctl -D /usr/local/var/postgres -l logfile start
createdb
psql 进入控制台
接下来就需要创建用户,最好创建一下以postgres用户。

CREATE USER postgres WITH PASSWORD 'xxxx';#这里的密码”xxxx“由你自己来设置
删除默认生成的postgres数据库:

DROP DATABASE postgres;
创建属于用户postgres的数据库,名字也叫postgres,当然你也可以取名叫别的。

CREATE DATABASE postgres OWNER postgres;
将数据库权限赋予为postgres用户:

GRANT ALL PRIVILEGES ON DATABASE postgres to postgres;
再给用户postgres用户添加创建数据库的属性,可以使用postgres作为数据库的登录用户并管理数据库。

ALTER ROLE postgres CREATEDB;

这样Mac上的PostgreSQL就基本设置好了。

————————————————
版权声明:本文为CSDN博主「MaineCoon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Brookekitty/article/details/106192977

1635729049858.jpg
综合起来,在压缩比率上: tar.bz2>tgz>tar
占用空间与压缩比率成反比: tar.bz2<tgz<tar
耗费时间(打包,解压)
打包:tar.bz2>tgz>tar
解压: tar.bz2>tar>tgz
从效率角度来说,当然是耗费时间越短越好
Linux下对于占用空间与耗费时间的折衷多选用tgz格式(tar包进行gzip算法的压缩),不仅压缩率较高,而且打包、解压的时间都较为快速,是较为理想的选择。
压缩:
tar -zcvf examples.tgz examples (examples当前执行路径下的目录)
解压缩:
tar -zxvf examples.tgz -C /path (/path 解压至其它路径)

查询某个字段重复的记录:
select * from TableA where b in (select b from TableA group by b having count(b) > 1)

查询某个字段重复的次数:
select sys_update_time,count(*) as count from gczb_packages_bidders group by sys_update_time
having count>100

insert into + select + join搭配使用:
insert into user_has_role(user_id, role_id) select * from(select a.id,2 from others_irp_user a left join user_has_role b on a.id=b.user_id where b.role_id is null) as tb

update + select + join搭配使用:
update output_list a
left join approve b on a.aid=b.id
left join others_irp_project c on a.pid = c.id
set b.is_loan_check = 1,b.is_filling_check = 1
where b.is_loan_check = 0 or b.is_filling_check = 0

查询updatetime字段值一样的数据,更新update,保证updatetime数据不重复,逐个累加:
set @r:=1495181783;
update gczb_agreements set last_update_time=FROM_UNIXTIME((@r:=@r+1)) where last_update_time in (select last_update_time from gczb_agreements group by last_update_time having count(last_update_time) > 300);

获取某个数据库表的所有索引生成创建sql:
SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' ','ADD ',IF(NON_UNIQUE=1,CASE
UPPER(INDEX_TYPE)
WHEN'FULLTEXT'THEN'FULLTEXT INDEX'
WHEN'SPATIAL'THEN'SPATIAL INDEX'ELSE CONCAT('INDEX ',INDEX_NAME,' USING ',INDEX_TYPE)
END,IF
(UPPER(INDEX_NAME)='PRIMARY',CONCAT('PRIMARY KEY USING ',INDEX_TYPE),CONCAT('UNIQUE INDEX ',INDEX_NAME,' USING ',INDEX_TYPE))),'(',GROUP_CONCAT(DISTINCT CONCAT('',COLUMN_NAME,'')ORDER BY SEQ_IN_INDEX ASC SEPARATOR', '),');')AS'Show_Add_Indexes'
FROM
information_schema.STATISTICS
WHERE
TABLE_SCHEMA='数据库名称'
AND TABLE_NAME='表名'
GROUP BY
TABLE_NAME,INDEX_NAME
ORDER BY
TABLE_NAME ASC,INDEX_NAME ASC;

优化编辑型:
⌘⌥L 代码快速格式化
⌘⇧V 从最近的缓冲区粘贴
⌘⇧↩ 自动结束代码,行末自动添加分号
⇧↩ 开始新的一行
⌘⇧U 大小写切换
⌘⌥← / ⌘⌥→ 退回 / 前进到上一个操作的地方
⌘E 显示最近打开的文件记录列表

代码辅助型:
⌃O 覆盖方法(重写父类方法)
⌃I 实现方法(实现接口中的方法)
⌘⌥T 包围代码(使用if..else, try..catch, for, synchronized等包围 选中的代码)
自定义:
⌘⇧T: close others tab

代码优化型:
⌃⌥O 优化import

git管理:
⌘K 提交代码到版本控制器
⌘T 从版本控制器更新代码

Mac键盘符号和修饰键说明

⌘ Command

⇧ Shift

⌥ Option

⌃ Control

↩︎ Return/Enter

⌫ Delete

⌦ 向前删除键(Fn+Delete)

↑ 上箭头

↓ 下箭头

← 左箭头

→ 右箭头

⇞ Page Up(Fn+↑)

⇟ Page Down(Fn+↓)

Home Fn + ←

End Fn + →

⇥ 右制表符(Tab键)

⇤ 左制表符(Shift+Tab)

⎋ Escape (Esc)

个人备忘:个人公司电脑快捷键配置(⌘:ctrl;⌥:alt;⇧:shift;⌃:Command)
未完待补充:https://mp.weixin.qq.com/s/HRjR1O237_3CiHFBw63fEw

1.智能设备

  • 扫地机器人:科沃斯X1
  • 净水器:美的(Midea) 前置过滤器40微米反冲洗压力表监控 QZBW20S-12 全屋净化净水器 && 美的( Midea)京品家电初见白泽1000G 智能家电除菌家用净水器 5年RO反渗透纯水机 以旧换新 MRO1787D-1000G && 即热水箱
  • 洗碗机:美国慧曼S2分层洗款
  • 云米智能晾衣机
  • 窗帘电机
  • 照明灯具(吸顶灯、照明灯、灯泡、夜灯等)
  • 投影仪
  • 电视机
  • 宠物饮水机
  • 宠物喂食器
  • 智能马桶
  • 智能热水器
  • 智能浴霸
  • 毛巾架
  • 智能电蚊香
  • 智能蒸汽眼罩
  • 智能床垫(自适应软硬可调节)
  • 智能烘鞋机
  • 洗衣机&烘干机
  • 智能枕头
  • 空气净化器
  • 打印机
  • 冰箱
  • 空调伴侣
  • 擦窗机器人
  • 电风扇
  • 电饭煲
  • 破壁机
  • 空气炸锅
  • 微波炉
  • 电烤箱
  • 电磁炉
  • 多功能锅
  • 咖啡机
  • 刀具架
  • 智能安防
  • 显示器机械臂
  • 电脑升降台
  • 可视门铃

2.网关

  • 绿米Aqara 网关M2(Apple HomeKit版)智能联动全屋智能家居 可siri语音联动 智能网关 * 3~5
  • 绿米Aqara 网关M1S (Apple HomeKit & 米家)
  • Aqara智能摄像头G3 (Apple HomeKit版)红外 & Zipbee3.0

3.智能音箱

  • 小度
  • homepod pro 1 && homepod mini 2
  • 叮咚
  • 小米

4.传感器

  • 温湿度传感器
  • 门窗传感器
  • 人体传感器
  • 水浸传感器
  • 烟雾传感器
  • 燃气传感器
  • 光照传感器
  • 动静传感器

5.开关插座

  • 墙壁开关(单火线非单火线区别?)

结论:看情况
理解概念:网关是一个设备用来协调手机与智能设备间的通讯,同时来收集传感器的信息,根据程序预设来通知执行器进行动作的设备。

  • 如果设备数量多,买需要网关的设备(zigbee设备、蓝牙mesh设备)比较好。
  • 如果设备数量少,例如整屋子的智能设备不到8个,那么随意买哪种都行,哪个算下来划算就买哪个。

v2-1700fc89549ccad011728c5c04b4ae16_r.jpeg

选择自带wifi连接的设备好处:不需要买网关。
选择zigbee/蓝牙mesh设备的好处:不占用家里路由器的连接数,当设备数量多的时候,不会导致网络不稳定。同种设备,价格相对比wifi版的设备便宜。当家里的WIFI热点改了名字或者改了密码,只需要给网关重新配网就好了,不需要每个设备都去配网。当家里的宽带故障了,网关内部的设备自动化逻辑还能正常运行(例如厕所的人体传感器感应到有人,自动开厕所灯)。

1、背景:日常工作中经常会遇到磁盘空间不足的情况,在服务器磁盘不足的情况中通常使用最快以及最灵活的lvm扩容方式进行

2、问题:如何通过lvm扩容磁盘,一般形式通过fdisk初始化挂载硬盘,然后通过pvc及vge相关命令进行相关磁盘格式处理,最后完成挂载

3、处理方法
通过fdisk命令初始化挂载的硬盘(fdisk /dev/vda)并且输入n进入新增磁盘步骤。Partition type部分输入p新增磁盘,随后进入选择分区号,可以直接回车默认分区号(此时需记录对应分区号,后面找磁盘方便),紧接着进入扇区编辑步骤,可根据需要扩容大小分配起始扇区及last扇区,完成后此两数值差为此磁盘大小。完成以上步骤后输入w保存所有操作,如操作过程有误可按ctrl c退出命令不保存相关操作。至此为之已完成磁盘初始化,此时需重启电脑重新挂载该磁盘生效相关配置。重启完毕后可以通过lsblk或者df -h找到分区后磁盘名字如vda3,此时可通过pvcreate 对应磁盘名字(/dev/vda3)进行pv创建。创建完毕后需查看需扩容磁盘所属group,查询完毕后通过命令vgextend创建vg(vgextend centos(此为查询得到的group) /dev/vda3)。挂载完毕后可通过命令lvdisplay查看所有lvm状态。查看之后通过命令lvextend将新磁盘挂载入需扩容磁盘同一目录(lvextend /dev/centos/home(此为需扩容磁盘目录) /dev/vda3(此为新建磁盘) -L +900G(此为需要扩容的对应磁盘大小))。完成后通过命令xfs_growfs刷新磁盘(xfs_growfs /dev/mapper/centos-home(此为需扩容磁盘目录))。至此完成磁盘扩容所有步骤,可再次通过命令lsblk或df -h查看磁盘大小。

4、问题思考
由于lvm方式扩容简单且灵活,但一旦磁盘出现故障很难进行恢复或拆分等操作,因此该模式也存在一定风险,所以对于重要服务器一般创建磁盘时就需分配足够磁盘空间,同时定时做好备份。

1、背景:日常工作中对于磁盘的维护所需技术储备其实非常多且杂,由于磁盘为系统根本,磁盘一旦出现故障或问题则将对系统造成一定的破坏及风险。因此对于磁盘的日常维护相当重要。

2、
问题1:如何查找磁盘最大文件或目录
处理1:可通过命令(du -h -x -d 1 /var|sort -h)查看对应目录下文件及文件夹大小并进行排序,其中/var为对应目录
问题2:如何linux环境下格式化u盘
处理2:首先通过命令df -h或lsblk查看插入u盘所挂载名字如sdb,查看之后通过命令mkfs.vfat -I /dev/sdb格式化,其中/dev/sdb为挂载u盘所在位置,-I为强制格式化
问题3:如何通过命令创建GPT格式的超过10t的硬盘
处理3:由于正常MBR格式硬盘最多只能初始化2T大小,对于超过2T大小硬盘则只能读取到2T大小,因此需要将硬盘格式化为GPT格式才可读取超过2T大小硬盘。首先我们通过命令parted(parted /dev/sdb(此为硬盘目录))进入格式化,接着输入命令mklabel GTP执行GPT格式的格式化,接着输入y确定。完成后输入mkpart进行分区操作,分区名称输入磁盘名加分区号(sdb1),接着文件类型建议默认ext2,然后进入确定扇区步骤,起始点与结束点数值之差为此磁盘大小,完成此步骤后需要等待,此等待时间视扇区大小变化。输入完毕后输入p保存所有操作,如中间存在错误操作可通过ctrl c退出。保存后输入quit推出parted。至此完成格式化所有操作。

3、问题思考
由于其磁盘的重要性,在对磁盘进行操作时每一步都需要慎之又慎,在进行操作前最好经过测试或对所有流程有一定熟悉度。同时进行高危操作时(如dd命令可直接对磁盘进行读写同时无法回退)命令最好找有经验人士确认无误后再操作。

服务器带宽一般指服务器
登录深信服后台查看服务器流量监控,可以看到统计数据是以Kbps为单位,
先理解一下:
Mbps 即 Milionbit pro second(百万位每秒);
Kbps 即 Kilobit pro second(千位每秒);
bps 即 bit pro second(位每秒);

bit即比特,通常用b(小写)表示,指一位二进制位,1Milionbit=1000Kilobit=1000000bit
所以1Mbps=1000000bps;

MB即百万字节也称兆字节;
KB即千字节;
B即字节;
之间关系为1MB=1024KB=1024*1024B;
1B=8b;

所以1M带宽即指1Mbps=1000Kbps=1000/8KBps=125KBps;
因此1M的带宽下载的速度一般不会超过125KB每秒。

对于云服务器而言,所谓带宽50M,一般指上行带宽是50M,下行不限制,上行指客户端是指50Mbps=50000Kbps,计算带宽理论最快下载速度:50÷8=6.25 MB/s,那么50M的带宽最快下载速度是6.25MB/s

线上有个查询sql,原来是没有join查询没有问题,后来应业务要求改成left join之后, 查询时间就暴涨了 需要长达17s

通过explain分析,发现订单表没有走索引:
分析结果显示有两个表type都是All
2021-03-22 13-47-38 的屏幕截图.png

于是猜测事索引没有加上,给所有where条件和left join on用到的字段都加上索引
再测,发现b表还是为All,讲道理,这个时候索引应该出发了才对,这时候我尝试给这个b.sub_acc_no这个表字段加到where条件里,发现执行变快了,但是explain发现type仍然为All,我都指定sub_acc_no的值了,type讲道理应该是ref了至少,这个时候基本能断定是所以失效了,开始查两个表字段差异,发现编码不一致,修改为一致后再explain:
2021-03-22 13-59-52 的屏幕截图.png
结论,如果两张表的编码和字段编码不一致,会导致索引失效

首先要知道影响在线人数的因素

1,访问量

2,网站类型:对于大多数的网站站长而言,网站的类型和性质是有所不同的,比如有小说站、论坛站、视频网站以及企业站等,那么相对来说论坛和小说站的访问量会比较大,视频网站的浏览和下载也比较耗用服务器的带宽资源,而普通企业站通常访问量比较少,所以不同的网站所需求的带宽大小也是不同的。如果是出文字的网站(如小说站),1M带宽带动日均5000IP,勉强可以。如果是普通网站有图片,有文字、论坛、新闻资讯类型网站 大概1M能带一千IP。考虑到高峰期并发,1M高峰期还会卡。

以下列子根据影响因素计算下1M带宽能同时承受多少人在线(以网络状况良好为前提)

1)、 打开网站8秒原则;

2)、 评判的只是:用户从服务器下载文件的速度;

3)、 页面的标准尺寸大小为:60KB;

参考公式:支持连接个人 = 服务器带宽/页面尺寸大小

通过计算大致结果是,1Mbps的带宽(服务器的1M带宽最快上下速度能达到1M/s,跟我们家用的带宽稍有区别)支持的连接数为:17个

因此,N M带宽可以支持的同时在线人数大概为N*17个

所以,1M带宽的云主机,日均3000IP以下应该没问题。当然如果你的每个页面都比较大的话,那就没这么多了。具体多少,可以按照上面的算法算下。

如果说服务器带宽说的5M带宽,实际上是5Mbps=625KB,需要是独享带宽,共享的话因为他人的因素无法计算。

然后计算你的网站大小,普通大小的网站页面(图片少,压缩过,代码优化)只有几K,我们姑且按照50K计算。

同时在线人数其实还关系到 IIS 这个参数限制,但是小网站几乎没有这个限制,可以不用担心,所以 625kb/50k=12.5人,大概同时在线12.5人访问这个50KB的页面是没有问题的。

要值得注意,这个是同时,也就是传统意义上的同一秒,只要有先后发送请求的顺序就可以错开,所以5M带宽严格意义上是很大的,如果你的页面小,几乎可以满足千人在线。

以上就是互联先锋推荐估算服务器带宽常用的方法,各位朋友可以参考选择更为适合自己需求的服务器带宽大小,减少不必要的带宽费用成本。

之前的php71是由remi源提供安装
先卸载php和相关的插件
yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64
检查是否卸载干净
yum list installed |grep php
选择php73
yum-config-manager --enable remi remi-php73
yum makecache -y
yum install -y httpd php php-gd php-mcrypt php-mbstring php-xml php-json php-mysqlnd php-pdo-mysql php-pecl-redis

对所有系统用户生效,永久生效

修改 /etc/profile 文件,在文件末尾加上如下两行代码(记得添加的是文件夹路径)
PATH=$PATH:/root/bin/Sencha/Cmd/6.6.0.13
export PATH

最后执行命令 source /etc/profile 或执行点命令 ./profile 使其修改生效。