DCache搭建测试

DCache搭建测试DCache 搭建测试工作需要 提前熟悉下部署过程 如有错误还望指点 简介背景 Dcache 使用腾讯 Tars 框架开发 属于分布式的 NoSQL 存储系统 数据存储在内存中 还可以连接后端 DB 做数据的持久化 支持平台 Linux 特点高性能存储引擎支持多种数据结构 如 key valuek k rowlistsetzs 支持数据持久化到后端 DB 集群模式

DCache搭建测试

工作需要,提前熟悉下部署过程,如有错误还望指点。

简介

背景

Dcache使用腾讯Tars框架开发,属于分布式的NoSQL存储系统。数据存储在内存中,还可以连接后端DB做数据的持久化。

支持平台

Linux

特点

  • 高性能存储引擎
    • 支持多种数据结构,如:
      • key-value
      • k-k-row
      • list
      • set
      • zset
    • 支持数据持久化到后端DB
  • 集群模式
    • 高可用
    • 高扩展
    • 异地镜像
    • 就近接入
  • 通过名字访问
    • 支持同步、异步、单向RPC调用
  • 高效运维平台(提供WebUI)
    • 服务部署
    • 扩缩容
    • 迁移
    • 服务配置
    • 质量监控

组成

  • tars框架
  • 业务服务
    • KVCache模块
      • 存储key-value
    • MKVcache模块
      • k-k-row
      • list
      • set
      • zset
  • 公共基础服务
    • OptServer
    • ConfigServer
    • PropertyServer
    • DCache管理平台

安装部署

tars框架

依赖环境
  1. 操作系统
    • linux内核:2.6.18 or later
  2. C++语言框架依赖
    • gcc:4.8.2 or later
    • glibc-devel
    • bison:2.5 or later
    • flex:2.5 or later
    • cmake:2.8.8 or later
    • rapidjson:1.0.2
  3. tars框架运行依赖
    • mysql:5.6.5 or later
  4. web管理系统依赖
    • nvm:0.33.11 or later
    • node:8.11.3 or later
依赖安装
$ yum -y install gcc gcc-c++ cmake yasm glibc-devel flex bison ncurses-devel zlib-devel autoconf python-requests 复制代码
mysql部署
  1. 下载mysql源码包(5.6.44版本), 官方要求数据库版本不低于5.6.5。
$ wget "https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.44.tar.gz" 复制代码
  1. 安装 – 编译安装
# 创建普通用户 $ useradd -m -d /home/mysql mysql # 解压源码包 $ tar zxf mysql-5.6.44.tar.gz # 创建mysql安装目录, 并做软连接 $ mkdir /usr/local/mysql-5.6.44 $ ln -s /usr/local/mysql-5.6.44 /usr/local/mysql # 修改属主属组 $ chown mysql:mysql /usr/local/mysql-5.6.44 /usr/local/mysql # 切换到源码目录,编译安装 $ cd mysql-5.6.44 $ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.44 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci $ make && make install 复制代码
  1. mysql服务配置
# 删除原始数据目录, 在数据盘创建数据目录,进行软连 $ rm -rf /usr/local/mysql/data $ mkdir -p /data/mysql-data $ ln -s /data/mysql-data /usr/local/mysql/data # 修改属主属组 $ chown -R mysql:mysql /data/mysql-data /usr/local/mysql/data # 配置启动脚本 $ cd /usr/loca/mysql/ $ cp support-files/mysql.server /etc/init.d/mysql # 初始化数据库 $ rm -rf /etc/my.cnf $ yum -y install perl $ yum install -y perl-Module-Install.noarch $ perl scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --pid-file=/var/run/mysql/mysql.pid --socket=/tmp/mysql.sock # 修改配置文件 $ vim /usr/local/mysql/my.cnf ''' [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. log_bin # These are commonly set, remove the # and set as required. basedir = /usr/local/mysql datadir = /usr/local/mysql/data # port = ..... # server_id = ..... socket = /tmp/mysql.sock bind-address={$your machine ip} # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. join_buffer_size = 128M sort_buffer_size = 2M read_rnd_buffer_size = 2M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES ''' # 启动服务,设置开机自启 $ service mysql start $ chkconfig mysql on 复制代码
  1. 设置环境变量
$ echo -e 'PATH=$PATH:/usr/local/mysql/bin\nexport PATH' > /etc/profile.d/mysql_env.sh $ source /etc/profile 复制代码
  1. 修改root初始密码, 授权登录
$ mysqladmin -u root password 'root@appinside' $ mysql -uroot -p mysql> grant all on *.* to "root"@"%" identified by 'root@appinside' with grant option; mysql> grant all on *.* to "root"@"localhost" identified by 'root@appinside' with grant option; mysql> grant all on *.* to "root"@"10.80.137.193" identified by 'root@appinside' with grant option; mysql> grant all on *.* to "root"@"platformxxxx.cdn.idc.com" identified by 'root@appinside' with grant option; 复制代码

tars 内部程序通过’root@{主机名}’登录数据库,需要授权。主机名可以通过/etc/hosts查看。

  1. 添加mysql库路径
$ vim /etc/ld.so.conf /usr/local/mysql/lib/ ldconfig 复制代码
  1. mysql主从配置

测试环境暂不需要,待正式部署后再做补充。#TODO

tars部署
  1. git clone Tars
# 使用递归方式clone $ git clone https://github.com/TarsCloud/Tars.git --recursive 复制代码
  1. 使用一键部署脚本
$ cd Tars/deploy # 修改数据库信息 $ vim comm.propertys host = 10.80.137.139 port = 3306 pwd = root@appinside # 授权tars用户权限 mysql> grant all on *.* to 'tars'@'%' identified by 'tars2015' with grant option; mysql> grant all on *.* to 'tars'@'localhost' identified by 'tars2015' with grant option; mysql> grant all on *.* to 'tars'@'platformxxxx.cdn.idc.com' identified by 'tars2015' with grant option; # 执行脚本 $ python deploy.py all 复制代码
  1. deploy.py脚本在执行过程中,会报错tars用户的’Access denied’, 但是在部署脚本中有tars用户的授权操作。目前观察问题现象是授权未执行成功,且没有报错,具体原因未查明,先手动授权预防报错。
  2. 该执行脚本不具有幂等性,不能重复执行。若必须重新执行的情况,需要修改脚本,注释掉已完成的函数部分,还要根据情况对应修改脚本。
  3. 脚本执行完成后,会自启动web服务,若端口冲突,需要修改/usr/local/app/web/config/webConf.js文件,将port端口号修改。详细操作可以见下面的步骤。
  1. web启停、web切换dcache-alpha分支,以及端口冲突问题解决
 切换DCache的web分支。  目前web管理界面,DCache服务暂时只提供体验版,需要在部署过程中手动切换分支(后期可以考虑修改部署脚本,直接指定tag来clone)。 # 备份文件 config/webConf.js, config/tars.conf $ cp config/webConf.js ~ $ cp config/tars.conf ~ $ cp package-lock.json ~ # 暂存当前master分支, 切换alpha分支。 $ rm -rf package-lock.json $ git stash $ git checkout -b dcache-alpha origin/dcache-alpha # 恢复文件 $ cp ~/webConf.js config/webConf.js $ cp ~/tars.conf config/tars.conf # 端口冲突解决 $ vim config/webConf.js webConf: { port: 33000, //服务启动端口, 默认3000 loggerPath: path.join(__dirname, '../log'), //本地日志的目录 logFileKeepDays: '1', //日志保留时间 defaultLanguage: 'cn', //cn 或 en ,用户默认的语言环境 }, # 修改dcache配置 $ vim config/dcacheConf.js module.exports = { enableDcache: true //启动dcache界面,默认false } # 从新安装npm依赖包 $ npm install --registry=https://registry.npm.taobao.org # web启停 # 启动web(prd为脚本名,详细查看package.json) $ npm run prd # 停止所有web $ pm2 kill # 使用别名启停单个web $ pm2 stop tars-node-web $ pm2 start tars-node-web # 命令行启动界面 ┌───────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬────────────┬──────┬──────────┐ │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │ ├───────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼────────────┼──────┼──────────┤ │ tars-node-web │ 0 │ 0.1.0 │ fork │ 29648 │ online │ 0 │ 27h │ 0.5% │ 103.1 MB │ root │ disabled │ └───────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴────────────┴──────┴──────────┘ # Web端访问地址 http://10.80.137.193:33000 # tars核心或普通服务端口占用修改 1. 登录web端界面 2. 依次点击 -> 需要修改的服务 -> 服务管理 -> 管理Servants -> 编辑 -> 绑定地址框 -> 修改'-p'后参数 -> 确认 3. 重启 -> 服务管理 -> 重启按钮 复制代码
  1. Tars用户体系模块使用

登录和管理权限模块,测试环境未部署,待补充。#TODO [官方文档]

  1. tars服务手动启停
# 启动基础服务 $ cd /usr/local/app/tars $ tarsregistry/util/start.sh $ tarsAdminRegistry/util/start.sh $ tarsnode/util/start.sh $ tarsconfig/util/start.sh $ tarspatch/util/start.sh # 停止基础服务 $ cd /usr/local/app/tars $ tarsregistry/util/stop.sh $ tarsAdminRegistry/util/stop.sh $ tarsnode/util/stop.sh $ tarsconfig/util/stop.sh $ tarspatch/util/stop.sh 复制代码
  1. tarsnode配置监控(crontab)
* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh 复制代码
  1. 业务服务节点扩容

主要涉及tarsnode服务的手动安装,测试环境暂无需要,后续补充。#TODO

  1. 放张web端效果图


Tars框架部分,部署完成。

DCache部署

1. 准备工作

# 克隆DCache项目 $ git clone https://github.com/Tencent/DCache.git # 下载第三方依赖代码 $ cd src/thirdParty $ chmod +x thirdparty.sh $ ./thirdparty.sh # 编译 # [坑]自动部署脚本将tarscpp编译到framework目录下,与DCache项目指定的路径不一致 # 需要在Tars/cpp目录下从新编译。(说明DCache是按照tarscpp子项目路径规则来指定的,没毛病。) $ cd Tars/cpp/ $ cmake . && make && make install # 编译DCache服务 $ cd src/ $ make release $ make all # 分别进入以下目录,生成发布包 $ cat dir_list.txt src/OptServer/ src/ConfigServer/ src/PropertyServer/ src/Router/ src/Proxy/ src/KVCacheServer/ src/MKVCacheServer/ $ cat dir_list.txt |while read line; do cd ${line}; make tar; cd -; done # 将所有tar包都下载到本地 # 几种方式(看个人喜好) - sz - wget (python -m SimpleHTTPServer 8080) - scp - git 复制代码

2. 公共服务部署

  • 2.1 安装OptServer
 数据库环境初始化 # 授权账户 mysql> grant all on *.* to 'dcache'@'%' identified by 'dcache2019' with grant option; mysql> grant all on *.* to 'dcache'@'localhost' identified by 'dcache2019' with grant option; mysql> grant all on *.* to 'dcache'@'platformxxxx.cdn.idc.com' identified by 'dcache2019' with grant option; mysql> flush privileges; # 创建数据库 $ vim src/OptServer/sql/exec-sql.sh db_install_ip="10.80.137.193" root="root@appinside" mysql -h $db_install_ip -uroot -p$root -e "drop database if exists db_dcache_relation; create database db_dcache_relation" mysql -h $db_install_ip -uroot -p$root --default-character-set=utf8 db_dcache_relation < db_dcache_relation.sql 复制代码

以下为服务部署,图片及说明大部分来源于官方文档。

1 ) 在Tars管理平台主页点击“运维管理”,然后填写必要的信息,如下图:

2 ) 上传发布包

根据上图数字序号,依次点击,得到如下提示框:

点击“上传发布包”,在新的提示页面上传DCacheOptServer.tgz发布包,得到如下页面:

点击“发布版本”下的输入框,选择目标发布包,然后点击“发布”,如发布成功,会显示如下页面:

3 ) 添加配置文件

 
   
# admin registry obj AdminRegObj = tars.tarsAdminRegistry.AdminRegObj charset = utf8 dbname = db_tars dbhost = 10.80.137.193 dbport = 3306 dbuser = root dbpass = root@appinside charset = utf8 dbname = db_dcache_relation dbhost = 10.80.137.193 dbport = 3306 dbuser = dcache dbpass = dcache2019 # 创建路由数据库的用户名和密码 dbuser = router_dcache dbpass = router_dcache_2019 # 发布服务线程数 ThreadCount = 5 # 通知node下线服务超时时间(秒) Timeout = 20 # 下线服务备份目录 BakPath = /data/dcacheuninstall/ # 下线服务线程数 ThreadCount = 2
复制代码

根据上图,依次点击,得到下图:

其中文件名称填“DCacheOptServer.conf”, 文件内容按照上面格式填写

4 ) 重启OptServer

根据上图,依次点击,重启OptServer,重启成功后,“当前状态”从“Off”变成“Active”,如下图所示:

  • 2.2 ConfigServer部署

安装ConfigServer的步骤和安装OptServer的步骤类似,除了不需要创建数据库外

添加配置时,可以参考DCache服务配置说明。

以下为我的测试配置示例:

 config #db_dcache_relation的数据库信息 
   
dbhost=10.80.137.193 dbpass=dcache2019 dbuser=dcache dbname=db_dcache_relation charset=utf8 dbport=3306
复制代码
  • 2.3 安装PropertyServer

安装PropertyServer的步骤和安装OptServer的步骤类似,除了不需要创建数据库外。 添加配置时,可以参考DCache服务配置说明。

以下为我的测试配置示例:

 
   
Sql=CREATE TABLE ` ${TABLE}` (`stattime` timestamp NOT NULL default CURRENT_TIMESTAMP,`f_date` date NOT NULL default '1970-01-01',`f_tflag` varchar(8) NOT NULL default '',`app_name` varchar(20) default NULL,`module_name` varchar(50) default NULL,`group_name` varchar(100) default NULL,`idc_area` varchar(10) default NULL,`server_status` varchar(10) default NULL,`master_name` varchar(128) NOT NULL default '',`master_ip` varchar(16) default NULL,`set_name` varchar(15) NOT NULL default '',`set_area` varchar(15) NOT NULL default '',`set_id` varchar(15) NOT NULL default '',`value1` varchar(255) default NULL,`value2` varchar(255) default NULL,`value3` varchar(255) default NULL,`value4` varchar(255) default NULL,`value5` varchar(255) default NULL,`value6` varchar(255) default NULL,`value7` varchar(255) default NULL,`value8` varchar(255) default NULL,`value9` varchar(255) default NULL,`value10` varchar(255) default NULL,`value11` varchar(255) default NULL,`value12` varchar(255) default NULL,`value13` varchar(255) default NULL,`value14` varchar(255) default NULL,`value15` varchar(255) default NULL,`value16` varchar(255) default NULL,`value17` varchar(255) default NULL,`value18` varchar(255) default NULL,`value19` varchar(255) default NULL,`value20` varchar(255) default NULL,`value21` varchar(255) default NULL,`value22` varchar(255) default NULL,`value23` varchar(255) default NULL,`value24` varchar(255) default NULL,`value25` varchar(255) default NULL,`value26` varchar(255) default NULL,`value27` varchar(255) default NULL,`value28` varchar(255) default NULL,`value29` varchar(255) default NULL,`value30` varchar(255) default NULL,`value31` varchar(255) default NULL,`value32` varchar(255) default NULL,`value33` varchar(255) default NULL,`value34` varchar(255) default NULL,`value35` varchar(255) default NULL,KEY(`f_date`,`f_tflag`,`master_name`,`master_ip`),KEY `IDX_MASTER_NAME` (`master_name`),KEY `IDX_MASTER_IP` (`master_ip`),KEY `IDX_TIME` (`stattime`),KEY `IDX_F_DATE` (`f_date`))ENGINE\=MyISAM TbNamePre=t_property_realtime AppName=dcache_idc5min_147 dbhost=10.80.137.193 dbname=taf_property_147 dbuser=dcache dbpass=dcache2019 dbport=3306 charset=gbk charset=gbk dbname=db_dcache_relation dbhost=10.80.137.193 dbpass=dcache2019 dbport=3306 dbuser=dcache InsertInterval=1 BakCenterError = property1 B inLogErr = property2 B inLogSyn = property3 CacheError = property4 Chunks/OnceElement = property5 BackUpObjAdapter.connectRate = property6 BackUpObjAdapter.queue = property7 B inLogObjAdapter.connectRate = property8 B inLogObjAdapter.queue = property9 CacheObjAdapter.connectRate = property10 CacheObjAdapter.queue = property11 RouterClientObjAdapter.connectRate = property12 RouterClientObjAdapter.queue = property13 WCacheObjAdapter.connectRate = property14 WCacheObjAdapter.queue = property15 asyncqueue = property16 memsize = property17 DataMemUsedRatio = property18 DbError = property19 DbException = property20 DirtyNum = property21 DirtyRatio = property22 ElementCount = property23 Exception = property24 HitCount = property25 MemSize = property26 getBatchCount = property27 setBatchCount = property28 MKMemUsedRatio = property29 eraseCount = property30 eraseCountUnexpire = property31 asyncqueue0 = property32 Jmem0DataUsedRatio = property33 Jmem1DataUsedRatio = property34 ColdDataRatio = property35 expireCount = property36 OnlyKeyCount = property37 BigChunk = property38
复制代码

3. DCache管理平台安装

# 修改web配置文件(前面已经做过了) $ cat /usr/local/app/web/config/dcacheConf.js # 安装 tars-dcache 模块 $ cd /usr/local/app/web/ $ npm install tars-dcache --save # 新建 db_cache_web 数据库, 并执行 Tars web service 项目sql文件夹下的db_cache_web.sql脚本,创建DCache web所需要的表。 mysql> CREATE DATABASE db_cache_web; mysql> use db_cache_web; mysql> source sql/db_cache_web.sql; # 启动或者重启管理平台即可在管理平台看到 Dcache 管理平台的入口。 $ pm2 kill $ npm run prd 复制代码

4. 创建DCache应用

DCache创建应用操作

  • 上传发布包
  • 上线模块
  • 模块配置

名词解释:

  • 模块:可以理解为mysql中table表的概念,需要创建对应模块来存储数据。两种Cache模块对应功能,上面已有说明不再赘述。
  • 应用:既多个模块的集合,该应用下的所有模块共享Proxy和Router服务,可以理解为mysql中db的概念。
  • 4.1 发布包上传

上传Proxy,Router,Cache对应的发布包是部署对应服务的前提。

1 ) Proxy发布包上传

依次点击,然后在弹出的提示框页面选择Proxy服务的发布包,上传。点击“默认”,将该发布包设置为Proxy服务的默认发布包,如下图:

2 ) Router发布包上传

Router发布包的上传和Proxy发布包的上传步骤相同。

3 ) Cache发布包上传

Cache发布包的上传和Proxy发布包上传步骤类似,只不过Cache有两种不同类型(KVCache和MKVCache)的发布包(本地也需分目录保存包文件),在“上传提示框”页面要注意类型匹配,如下图:

上传完两种不同类型的发布包并分别设置为默认,得到下图:

  • 4.2 部署和发布Proxy和Router服务

根据上图,依次点击“DCache”和“运维管理”,其中“应用”和“管理员”必填,可自定义,然后点击“创建应用”,得到下图:

在输入框填写相关信息,其余保持不变,点击“创建router、proxy服务”,得到下图:

确认填写无误后,点击“安装发布”,等待安装完成,结果如下图所示(先看个问题,稍后放图):

[坑] 在创建router、proxy服务环节,数据库的用户名和密码我采用之前创建的user: dcache, pwd: dcache2019 这一套。然后当点击安装发布时,出现以下报错:

从报错上来看,是服务访问数据库时被denied。这让我很疑惑,dcache账户明明已经做过授权。再仔细一看发现这里报错的账户是’router_dcache’,并不是我输入的用户名。难道程序做了其他操作给用户名加上了router前缀?

带着疑惑,再在数据库创建router_dcache用户并授权,密码使用与dcache相同的密码再次执行,结果仍然报错。

通过排查mysql的general log,服务确实是通过router_dcache这个用户访问的,那问题可能就出在,这个用户使用的密码也与前面输入的不一致。

安装完成图如下:

  • 4.3 上线一个KVCache模块

按照上图箭头依次点击,“应用”选择在部署和发布Proxy和Router服务创建的应用名称,“cache类型”选择KVCache,所填信息确认无误后,点击“下一步”进入“模块配置”步骤,如下图:

填写必要信息之后,点击“下一步”,进入“服务配置”步骤,如下图:

再次确认信息填写无误,点击“安装发布”,等待服务发布完成。刷新管理平台主页,左侧目录树出现此模块信息,如下图:

  • 4.4 上线一个MKVCache模块

步骤和部署和发布KVCache类似,参考即可

  • 4.5 Cache配置管理

按照上图箭头依次点击,可添加配置项。

  • 4.6 模块和单节点的配置管理

按照上图箭头依次点击,可在该页面上修改和添加配置。该页面的配置管理分两种类型:针对模块所有节点的配置管理和针对模块特定节点的配置管理。

项目待完善的问题

初步接触之后,比较关心下面两个问题的后续发展。

  1. DbAccess对接后端DB文档,目前官方未能提供。
  2. 项目语言支持暂时只要C++。(可能在2019第四季度会支持一些其他语言版本)

转载于:https://juejin.im/post/5cde6ca3e51d45106e5e6da3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176644.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:24
下一篇 2026年3月26日 下午9:25


相关推荐

  • 免费高清第二波!12个无版权限制的大图特供网站

    免费高清第二波!12个无版权限制的大图特供网站推荐:cyRotel2014/08/21in酷站推荐更多22上次优设分享了10个高清无码图库后,竟然有同学评论下回复好人一生平安,盛怒之下,小编意犹未尽马不停蹄精挑细选了这15个大图网站,质量上乘,看着舒服,不担心眼睛。用着舒心,不担心侵权。看入迷了,也不用紧张,永久免费下载。就是这么棒棒哒!对了,上次那篇右戳:《免费高清!10个无版权限制的大图特供…

    2022年7月11日
    19
  • python3·7创建虚拟环境_python激活虚拟环境

    python3·7创建虚拟环境_python激活虚拟环境Centos7安装Python3,创建python3虚拟环境

    2025年11月12日
    4
  • executescalar mysql_DbCommand.ExecuteScalar 方法的返回值[通俗易懂]

    executescalar mysql_DbCommand.ExecuteScalar 方法的返回值[通俗易懂]DbCommand.ExecuteScalar方法执行查询,并返回查询所返回的结果集中第一行的第一列。所有其他的列和行将被忽略。语法:publicabstractObjectExecuteScalar()返回值:类型:System.Object,结果集中第一行的第一列。备注:使用ExecuteScalar方法从数据库中检索单个值(例如一个聚合值)。与使用ExecuteRe…

    2022年6月29日
    34
  • 【Luyten反编译工具】

    【Luyten反编译工具】反编译 Jar 包一般使用 JD GUI 工具 很方便 但有时会出现异常 如下 此时 可以辅助使用另一个工具来反编译代码 https www softpedia com get Programming Debuggers Decompilers Dissasembler Luyten shtml 下载完成 双击 exe 如果出现 原因可能如下 我本机使用的是非安装版的 JDK8 只在环境变量中指定了 JDK 的路径 在注册表中没有 JDK 相关的信息 解决方案 按住 Shift 键 再点击鼠标右键

    2026年3月16日
    1
  • MATLAB 数组拼接

    MATLAB 数组拼接例如a=,b=横向拼接:c=[a,b]c=纵向拼接:c=[a;b]c=

    2022年6月11日
    115
  • eclipse首选项里面没有Server(eclipse的server视图)

    学习JavaWeb需要安装tomcat,但一直找不到sever选项,很苦恼下面将详细介绍eclipse中servers不见了的解决方法。    ①在软件eclipse下的Help-&gt;InstallNewSoftware-&gt;中,在Workwith中点击Add,如下,加入Name——"Kepler"repository;Location——http://downlo…

    2022年4月17日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号