2020-10-14 总结

本文介绍了Nginx如何通过轮询、weight权重和url_hash策略实现负载均衡,同时对比分析了dbcp、c3p0和proxool三种数据库连接池的性能与优缺点。

Nginx 的负载均衡

我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大,如上例,分别是30%,70%。

3、url_hash(第三方)

4、fair

Linux常用命令排查问题

cd /home 进入 ‘/ home’ 目录’
cd … 返回上一级目录
cd …/… 返回上两级目录

pwd 显示工作路径
ls 查看目录中的文件

mkdir dir1 创建一个叫做 ‘dir1’ 的目录’

rm -f file1 删除一个叫做 ‘file1’ 的文件’

cp file1 file2 复制一个文件

find / -name file1 从 ‘/’ 开始进入根文件系统搜索文件和目录

grep命令我们往往会用grep命令在某个日志搜索指定关键词

微服务之间的远程调用使用了什么组件使用了什么注解

Feigen服务调用

  1. 在调用端的启动类添加注解
  2. @EnableFeignClients
  3. //服务调用注解,指定被调用端服务名称
  4. @FeignClient(“service-vod”)

常用注解

@Autowired自动装配

Qualifier(指定注入Bean的名称)

@Resource注解与@Autowired注解作用非常相似

@Controller对应表现层的Bean

@Service对应的是业务层Bean

@Repository

@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。

@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定销毁方法(用在方法上)
@DependsOn:定义Bean初始化及销毁时的顺序
@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下:
@Autowired @Qualifier(“personDaoBean”) 存在多个实例配合使用
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
@PostConstruct 初始化注解
@PreDestroy 摧毁注解 默认 单例 启动就加载
@Async异步方法调用

数据库连接池

**1 dbcp
dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。这个连接池的配置参见附件压缩包中的:dbcp.xml
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性
有所下降,此外不提供连接池监控

2 c3p0
c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:c3p0.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,
此外不提供连接池监控。

3 proxool
proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:proxool.xml。**

上传的实现

配置依赖:因为我们使用的maven来管理工程,所以我们需要去添加pom文件依赖

配置信息:我这里是配置在 yml 文件中的

// 链接FastDFS服务器,创建tracker和Stroage

搭建好nginx环境后可以通过返回的url路径访问上传的文件

rides常用的数据类型

字符串string

字符串类型是Redis中最为基础的数据存储类型,是一个由字节组成的序列,他在Redis中是二进制安全的

列表list

列表由多个字符串值组成的有序可重复的序列,是链表结构

散列hash

Redis中的散列可以看成具有String key和String value的map容器,可以将多个key-value存储到一个key中

集合set

Redis的集合是无序不可重复的,和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作

有序集合sorted set

和set很像,都是字符串的集合,都不允许重复的成员出现在一个set中

BT中的Tracker 是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。 客户端连上tracker服务器,就会获得一个下载人员的名单,根据这个,BT会自动连上别人的机器进行下载。它是提供bt的服务器。把文件用bt发布出来的人需要知道该使用哪个服务器来为要发布的文件提供tracker。由于不指定服务器,BitTorrent采用BT文件来确定下载源。 BT中的Tracker 是指运行于服务器上的一个程序,这个程序能够追踪到底有多少人同时在下载同一个文件。 客户端连上tracker服务器,就会获得一个下载人员的名单,根据这个,BT会自动连上别人的机器进行下载。它是提供bt的服务器。把文件用bt发布出来的人需要知道该使用哪个服务器来为要发布的文件提供tracker。由于不指定服务器,BitTorrent采用BT文件来确定下载源。 tracker服务器是BT下载中必须的角色。一个BTclient在下载开始以及下载进行的过程中,要不停的与tracker服务器进行通信,以报告自己的信息,并获取其它下载client的信息。这种通信是通过HTTP协议进行的,又被称为tracker HTTP协议,它的过程是这样的: client向tracker发一个HTTP的GET请求,并把它自己的信息放在GET的参数中;这个请求的大致意思是:我是xxx(一个唯一的id),我想下载yyy文件,我的ip是aaa,我用的端口是bbb。。。 tracker对所有下载者的信息进行维护,当它收到一个请求后,首先把对方的信息记录下来(如果已经记录在案,那么就检查是否需要更新),然后将一部分(并非全部,根据设置的参数已经下载者的请求)参与下载同一个文件(一个tracker服务器可能同时维护多个文件的下载)的下载者的信息返回给对方。 Client在收到tracker的响应后,就能获取其它下载者的信息,那么它就可以根据这些信息,与其它下载者建立连接,从它们那里下载文件片断。 tracker服务器架设 BitTorrent Tracker是一个高性能增强型BitTorrent服务器。BitTorrent Tracker同时支持HTTP和UDP的Tracker协议,采用高性能服务器技术, 支持多端口同时监听,数据更新插件。BitTorrent Tracker通过了8万个文件和80万个在线用户的高强度测试。用户可根据需要自行改写数据库通信插件, 打造属于自己的服务器, 配合服务器端脚本可实现一个功能完备的BT服务器。   架设好后,您的tracker服务器地址格式为   外网ip:端口/announce
<think>首先,用户的问题是:了解使用 `adb shell date -s '2020-12-07 14:36'` 命令时可能遇到的问题及解决办法,以及该命令的详细用法。具体来说,是关于 `adb shell date -s 'YYYY-MM-DD HH:mm'` 的使用方法和常见问题解决办法。 从系统级指令中,我需要遵守以下规则: - 所有行内数学表达式使用 `$...$` 格式,但在这个上下文中,可能没有太多数学内容,所以我会注意。 - 独立公式使用 `$$...$$` 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 insky<think> 在回答中引用的段落末尾自然地添加引用标识。 用户提供了三个引用: - [1] 关于 `adb shell date` 修改系统时间和时区,包括设置时区和具体时间命令。 - [2] 关于 ADB 主要操作命令,包括连接设备、安装应用、文件操作等。 - [3] 关于 Shell date 命令详解,特别是处理小时和分钟时可能出现的进制问题。 用户上一次的问题是关于 `adb shell date -s` 命令的用法和问题。我需要基于这些引用构建回答。 关键点: - 命令格式:`adb shell date -s 'YYYY-MM-DD HH:mm'`,用于设置设备的时间。 - 常见问题:可能包括权限问题、时间格式错误、时区设置等。 从引用[1]:有示例命令如 `adb shell su date -s "2024-04-16 18:00:00"`,注意这里用了 `su` 来获取 root 权限。 从引用[3]:讨论了在 shell date 命令中,当小时或分钟以 0 开头(如 08, 09)时,可能会导致 "value too great for base" 错误,因为 shell 可能将其解释为八进制数。解决方案是使用 `10#` 前缀来强制十进制解释。 所以,常见问题可能包括: 1. 权限问题:需要 root 权限才能修改系统时间。引用[1]中的命令使用了 `su`,所以可能需要先获取 root。 2. 时间格式错误:格式必须是 `YYYY-MM-DD HH:mm` 或类似。如果格式不对,命令会失败。 3. 时区问题:修改时间后,可能需要设置时区以确保正确。引用[1]提到设置时区命令如 `adb shell setprop persist.sys.timezone Pacific/Midway`。 4. 数字格式问题:如引用[3]所述,小时和分钟以 0 开头时可能出错。 回答结构: - 先解释命令的详细用法。 - 然后列出常见问题及解决办法。 - 最后生成相关问题。 使用中文回答。 确保回答真实可靠:基于提供的引用和一般知识。 步骤: 1. **命令详细用法**: - 描述命令:`adb shell date -s 'YYYY-MM-DD HH:mm'` 用于设置 Android 设备的系统时间。 - 需要 ADB 连接到设备。 - 格式:年份--日 小时:分钟。 - 可能需要 root 权限。 2. **常见问题及解决办法**: - **权限问题**:需要 root 权限。解决办法:使用 `adb shell su` 来执行命令,如 `adb shell su -c "date -s '2020-12-07 14:36'"`。 - **时间格式错误**:确保格式正确。如果格式无效,命令会失败。解决办法:严格按照 `YYYY-MM-DD HH:mm` 格式输入。 - **时区不一致**:修改时间后,时区可能不匹配。解决办法:先设置时区,使用 `adb shell setprop persist.sys.timezone [时区]`,如 `Asia/Shanghai`。 - **数字格式问题**:如果小时或分钟以 0 开头(如 08, 09),shell 可能误认为是八进制。解决办法:在脚本中,使用 `let` 命令或 `10#` 前缀强制十进制,如引用[3]所示。 - **命令执行失败**:设备可能未连接或 ADB 未授权。解决办法:检查 `adb devices` 确保设备连接。 3. **生成相关问题**:基于主题,生成 3-4 个相关问题。 最终回答结构: - 引言:简要介绍命令。 - 详细用法。 - 常见问题及解决办法。 - 相关问题。 </think> ### adb shell date -s 'YYYY-MM-DD HH:mm' 命令使用方法及常见问题解决办法 `adb shell date -s 'YYYY-MM-DD HH:mm'` 命令用于通过 ADB(Android 调试桥)设置 Android 设备的系统时间。这常用于开发、测试或调试场景,例如模拟特定时间点的事件。命令格式为 `date -s '年--日 小时:分钟'`,其中时间必须以 `YYYY-MM-DD HH:mm` 格式严格指定(例如 `2020-12-07 14:36`)。以下基于引用内容,详细说明用法及常见问题解决方案。 #### 1. 命令详细使用方法 - **基本语法**: ```bash adb shell date -s 'YYYY-MM-DD HH:mm' ``` 例如,设置时间为 2020 年 12 月 7 日 14:36: ```bash adb shell date -s '2020-12-07 14:36' ``` 此命令直接在设备上修改系统时间,但通常需要 root 权限才能生效[^1]。 - **完整步骤**: 1. **连接设备**:确保设备通过 USB 或网络连接到计算机,并使用 `adb devices` 验证连接状态[^2]。 2. **获取 root 权限**:大多数设备需要 root 权限来修改系统时间。推荐使用 `su` 命令: ```bash adb shell su -c "date -s '2020-12-07 14:36'" ``` 如果设备已 root,这能避免权限错误[^1]。 3. **验证时间修改**:执行后,使用 `adb shell date` 检查当前时间是否更新。 4. **设置时区(可选)**:时间修改后,时区可能不匹配。使用 `adb shell setprop persist.sys.timezone [时区]` 设置时区,例如 `Asia/Shanghai`: ```bash adb shell setprop persist.sys.timezone Asia/Shanghai ``` 时区列表可通过 `adb shell "getprop persist.sys.timezone"` 查询[^1]。 - **注意事项**: - 时间格式必须精确:年份为 4 位(YYYY),月/日为 2 位(MM/DD),小时/分钟为 2 位(HH:mm)。例如,上午 8 点应写为 `08:00`,而非 `8:00`。 - 在脚本中使用时,建议添加错误处理,如检查命令返回值。 #### 2. 常见问题及解决办法 以下列出使用 `adb shell date -s` 命令时的典型问题,基于引用内容提供解决方案: 1. **权限不足错误(如 "Permission denied")**: - **问题描述**:修改系统时间需要 root 权限,普通用户执行命令可能失败。 - **解决办法**: - 使用 `su` 命令获取 root 权限:`adb shell su -c "date -s 'YYYY-MM-DD HH:mm'"`。 - 如果设备未 root,尝试启用 ADB root 模式:先运行 `adb root`,再执行时间设置命令。 - 验证设备 root 状态:使用 `adb shell whoami` 检查用户是否为 `root`。 2. **时间格式错误或解析失败(如 "date: invalid date")**: - **问题描述**:输入格式不正确(如缺少引号、日期格式错误)或小时/分钟以 0 开头(如 `08`, `09`)导致 shell 误解释为八进制数,引发 "value too great for base" 错误[^3]。 - **解决办法**: - 严格遵守 `YYYY-MM-DD HH:mm` 格式,并用单引号包裹时间字符串。 - 在脚本中处理数字时,强制使用十进制:使用 `let` 命令或 `10#` 前缀。例如: ```bash v_hour=08 v_min=09 let v_hour=10#$v_hour # 强制转换为十进制 let v_min=10#$v_min # 强制转换为十进制 adb shell su -c "date -s '2020-12-07 $v_hour:$v_min'" ``` 这能避免八进制解释问题[^3]。 - 测试格式:先在本地 shell 运行 `date -d 'YYYY-MM-DD HH:mm'` 验证有效性。 3. **时区不一致导致时间偏移**: - **问题描述**:修改时间后,设备时间与实际时区不匹配(如显示时间比设置值快/慢数小时)。 - **解决办法**: - 先设置正确时区:运行 `adb shell setprop persist.sys.timezone [时区]`,例如 `Asia/Shanghai` 或 `Pacific/Midway`。 - 同步时区后重启设备:`adb shell reboot` 使设置生效。 - 查询当前时区:`adb shell "getprop persist.sys.timezone"` 以确保一致性。 4. **命令无响应或设备未连接**: - **问题描述**:ADB 未连接设备、设备离线或未授权。 - **解决办法**: - 检查连接:运行 `adb devices` 确认设备状态为 `device`。 - 重新连接设备:`adb reconnect` 或 `adb connect <device_ip>:<port>`。 - 授权提示:在设备上确认 "允许 ADB 调试" 对话框。 5. **时间修改后重置**: - **问题描述**:设备重启后时间恢复默认(常见于未持久化设置)。 - **解决办法**: - 修改系统属性:结合 `setprop` 命令设置持久化时间,例如 `adb shell "setprop persist.sys.time YYYY-MM-DD.HH:mm"`(具体属性名需根据设备定制)。 - 使用 NTP 同步:如果设备支持,启用网络时间协议:`adb shell settings put global auto_time 1`。 #### 3. 总结 `adb shell date -s` 是高效设置设备时间的工具,但易受权限、格式和时区影响。始终使用 `su` 提权、严格遵循时间格式,并同步时区以避免常见问题。实践中,建议在脚本中添加错误日志以捕获失败原因。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值