OA性能调优方案(一)

本文档是基于实际项目编写的,适用于 OA2019 及以上版本(基于 nginx)的性能调优方案。本文档首先介绍此项目的实际情况,然后分析问题并找到其性能瓶颈,并针对其瓶颈制定优化方案。

1      项目情况介绍

基础环境:

CPU

两个 CPU,每个 CPU 8 核

内存

64G

硬盘

机械硬盘,大小未知

操作系统

windows server 2008 32 位(或者更低)

使用情况

账号总数

约 6000(以后会增加到上万人)

日常在线人数

不到 1000(以后会增加到几千人)

数据量

刚开始使用,数据量很小

2      问题分析

2.1  项目特点分析

此项目的特点是用户数量大,活跃用户多,产生的数据量也会比较大,对服务器会产生较大压力。这就要求服务器需要有较好的硬件资源,能支持较高的并发访问。

2.2  基础环境分析

① CPU、内存配置较高,不会出现瓶颈。

② 硬盘为机械硬盘,性能较低,使用 OA 的人数较多,数据量会飞快增长,并发访问人数较多,对数据库压力会较大,容易出现瓶颈

③ 操作系统为老的 windows server,对于并发请求处理能力不够,同

时,系统为 32 位,可以调动的内存只能达到 4G,内存资源无法充分利用,是一个极大的瓶颈

④ OA 自带的 nginx 无法发挥 CPU 多核的优势

3      解决方案

3.1  推荐环境

目前 OA 服务器推荐的环境:

硬盘

固态硬盘

推荐数据库所在盘是固态硬盘

解决数据量大和数据库并发访问大时的数据库执行效率

操 作 系 统

(win)

优先级由高到底排列

windows server 2016 64 位

windows server 2012 64 位

对大量并发访问支持较好,能调用更多硬件资源,尤其是内存资源

操 作 系 统

centos 64 位

若在线用户数 2000

(linux)

上,需要使用 linux

操作系统+固态硬盘

需要用户有专业人员维护 Linux 服务器

3.2  并发支持能力调优

由于 windows server 的某些限制,OA 自带的 nginx 无法利用 CPU 的多核性能(配置 nginx 多进程工作也无法利用多核 CPU),因此需要使用支持多核 CPU 的 nginx 版本。

3.2.1    安装支持多核的 nginx

3.2.1.1  下载 nginx

Nginx 下载路径:nginx for Windows

将解压后的文件夹放到 MYOA 目录下:

3.2.1.2  替换配置文件

直接将原 nginx 里的 conf 文件夹拷贝到 nginx 1.13.10.1 Crow 下,合并并替换文件

3.2.1.3  添加依赖文件

新 Nginx 的运行需要 msvcr100.dll 这个文件,标准 OA 中就有,将

MYOA\bin\msvcr100.dll 文件拷贝到 nginx 1.13.10.1 Crow 目录下

3.2.1.4  修改监听端口

目前原有的 nginx 还在正常运行,在完全替换 nginx 前,先将新 nginx 的监听端口改为 90

配置文件:

 

3.2.1.5  打开 nginx 的监控页

新 nginx 有一个很详细的状态监控页面,可以查看 nginx 的运行状态等信息, 方便我们了解 nginx 是否配置生效

下面这个文件告诉我们怎么打开这个监控页

将配置项拷贝到相应的地方:

3.2.1.6  开启 nginx 并测试

执行注册表文件 Tweak-Optimize tcpip parameters for nginx connections.reg,注册必要服务:

编写两个 bat 文件:

start.bat,开启 nginx

技术支持QQ2524837118

stop.bat,关闭 nginx

双击 start.bat,开启新 nginx,访问 http://localhost:90/

可以访问,说明 nginx 已正常运行:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的权限管理OA代码示例,你可以根据自己的需求进行修改和扩展。 ``` // 用户类 class User { constructor(name, role) { this.name = name; this.role = role; } } // 角色类 class Role { constructor(name, permissions) { this.name = name; this.permissions = permissions; } } // 权限类 class Permission { constructor(name) { this.name = name; } } // OA系统 class OASystem { constructor() { this.users = []; this.roles = []; this.permissions = []; } // 添加用户 addUser(name, roleName) { const role = this.roles.find(role => role.name === roleName); if (!role) { throw new Error(`Role ${roleName} does not exist.`); } const user = new User(name, role); this.users.push(user); console.log(`User ${name} has been added.`); } // 添加角色 addRole(name, permissionNames) { const permissions = permissionNames.map(name => { const permission = this.permissions.find(permission => permission.name === name); if (!permission) { throw new Error(`Permission ${name} does not exist.`); } return permission; }); const role = new Role(name, permissions); this.roles.push(role); console.log(`Role ${name} has been added.`); } // 添加权限 addPermission(name) { const permission = new Permission(name); this.permissions.push(permission); console.log(`Permission ${name} has been added.`); } // 用户是否有权限 hasPermission(userName, permissionName) { const user = this.users.find(user => user.name === userName); if (!user) { throw new Error(`User ${userName} does not exist.`); } const permission = this.permissions.find(permission => permission.name === permissionName); if (!permission) { throw new Error(`Permission ${permissionName} does not exist.`); } return user.role.permissions.includes(permission); } } // 使用示例 const oaSystem = new OASystem(); oaSystem.addPermission('create'); oaSystem.addPermission('read'); oaSystem.addPermission('update'); oaSystem.addPermission('delete'); oaSystem.addRole('admin', ['create', 'read', 'update', 'delete']); oaSystem.addRole('user', ['read']); oaSystem.addUser('Alice', 'admin'); oaSystem.addUser('Bob', 'user'); console.log(oaSystem.hasPermission('Alice', 'create')); // true console.log(oaSystem.hasPermission('Bob', 'create')); // false ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值